标签: plsql

在plsql中映射元素然后排序

我的问题是我有一个数据库列让我们调用x.

x值为0,1,2,3.在我的java应用程序中,每个数字都有自己的值:

0 - expire
1 - approval
2 - pending
3 - counting
Run Code Online (Sandbox Code Playgroud)

我需要做的是从数据库记录中选择与它们相关的字符串值

所以如果上面的选择结果将是:

1 - approval , 
3 - counting,
0 - expire
2 - pending.
Run Code Online (Sandbox Code Playgroud)

我必须补充说java中的排序是不可能的,所以我需要在plsql站点中对记录进行排序.

任何人都可以帮我如何执行这种查询,

先感谢您

java sql database oracle plsql

2
推荐指数
1
解决办法
99
查看次数

有效的日期格式检查Oracle - 奇怪的行为

我们一直在研究一些遗留代码,并找到了检查日期(VARCHAR2)是否以正确格式'YYYY-MM-DD HH24:MI:SS'传递的函数.它使用简单的构造

function IS_CORRECT_TIMESTAMP(P_EVENT_TIMESTAMP varchar2)
    return number is
    V_TIMESTAMP timestamp;
  begin
    select TO_TIMESTAMP(NVL(P_EVENT_TIMESTAMP, '1'),
                        'YYYY-MM-DD HH24:MI:SS')
      into V_TIMESTAMP
      from DUAL;
    return 1;
  exception
    when others then
      return - 1;
  end;
Run Code Online (Sandbox Code Playgroud)

问题是,当我传递值例如'22 -AUG-13'时,它不会抛出任何异常.这可能是什么原因?

谢谢你的想法.

sql oracle plsql

2
推荐指数
1
解决办法
2024
查看次数

oracle程序使用Host()命令

我host()在oracle程序中使用命令时遇到问题.我编写了非常简单的oracle代码.

CREATE OR REPLACE PROCEDURE 

run_command(command_i IN VARCHAR2)

IS
  l_message  VARCHAR2 (100);

BEGIN

  l_message  := 'cmd ' || command_i;

  host(l_message); 

END run_command;
Run Code Online (Sandbox Code Playgroud)

何时host(l_message);被淘汰工作正常.

问题是什么,无论如何要创建一个使用的例程host()?

oracle plsql oracle11g

2
推荐指数
1
解决办法
9139
查看次数

循环使用表A并使用PL/SQL更新表B列C.

有一个叫做的表TableA和另一个叫做的表TableB

我需要复制的列值ValueC表中TableB的列ValueD在表中TableA.两个表共享一个公共列:Table_id

我试过用:

DECLARE 
   CURSOR c_App
   IS
     SELECT *
       from TableA
BEGIN 
   for i in c_App
   LOOP
     select ValueD from TableB where Table_id = c_App.Table_id;
   END LOOP;
   update TableA set ValueC = ValueD  where Table_id = c_App.Table_id
END;
Run Code Online (Sandbox Code Playgroud)

但是,我在SQL开发人员中遇到错误:

PLS-00103: Encountered the symbol "END" when expecting one of the following:

   begin function package pragma procedure subtype type use
   <an identifier> <a double-quoted delimited-identifier> form
   current cursor
06550. 00000 …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql

2
推荐指数
1
解决办法
2171
查看次数

一个Oracle预定作业与另一个实例并行运行.怎么预防这个?

我有一个存储的PL/SQL过程,每10分钟启动一次(预定的工作).有时我的程序执行超过10分钟.在这种情况下,Oracle调度程序与第一个实例并行运行我的过程的另一个实例.如何在第一个过程完成之前阻止Oracle启动新过程?

oracle plsql scheduled-tasks dbms-scheduler

2
推荐指数
1
解决办法
3789
查看次数

对pl/sql中的字符串进行标记并获取唯一标记?

我要求在pl/sql中对字符串进行标记,并仅返回唯一的标记.我已经看到了将字符串标记化的示例,但没有一个会返回唯一的标记.

例如查询 -

select tokenize('hi you person person', ' ') as col1 from dual;
Run Code Online (Sandbox Code Playgroud)

应该回来 TOKEN_LIST('hi','you','person')

代替 TOKEN_LIST('hi','you','person','person')

sql oracle plsql token tokenize

2
推荐指数
1
解决办法
1万
查看次数

将十六进制转换为字符串

我想用来HEXTORAW()从ASCII十六进制代码“ 30”中获取char值。ASCII HEX 30应该返回varchar'0'。

怎么做到的?是HEXTORAW()正确的功能吗?

oracle plsql

2
推荐指数
1
解决办法
2万
查看次数

自动设置Oracle的序列起始值

我有很多现有的表,每个表都有一个名为'id'的列.此列具有从1开始的整数值.例如,表MY_TABLE包含3条记录,其中ID为1,2和3(超级基本).

我想为每个表创建一个序列,并使用表的最大id设置其起始值.在我的例子中,我需要这样的东西:

CREATE SEQUENCE MY_TABLE_SEQ START WITH 3 INCREMENT BY 1;
Run Code Online (Sandbox Code Playgroud)

我尝试过类似的东西,但它不起作用:

CREATE SEQUENCE MY_TABLE_SEQ START WITH (SELECT NVL(MAX(id),1) FROM MY_TABLE) INCREMENT BY 1;
Run Code Online (Sandbox Code Playgroud)

知道我可以做什么吗?

谢谢

oracle plsql sequence

2
推荐指数
1
解决办法
938
查看次数

删除外部表会清除从外部表填充的全局临时表

我正在使用外部表来从文件加载数据.这个数据有很多需要经过的处理,外部表是动态创建的,所以数据应该被加载到外部表中,然后进入全局临时表,然后删除外部表并进行处理继续临时表中的数据.临时表的结构与外部表的结构相匹配.

删除外部表正在清除全局临时表.

这一切都发生在同一个过程中,所以我不认为这是一个会话问题.

proc看起来像这样:

create or replace 
PROCEDURE Upload_Data_File
(
  filename IN varchar2
)
IS
  can_create_table char(1) := 'Y';
  ext_table_name varchar2(200) := filename;
  sql_to_run varchar(5000) := '';
BEGIN
/*****************************************************************************
  Create external table/load file data
*****************************************************************************/
  BEGIN
    ext_table_name := replace(ext_table_name, '.', '_');
    ext_table_name := 'ext_' || ext_table_name;
    sql_to_run := 'CREATE TABLE ' || ext_table_name || '
                       (    
                          ROW1 CHAR(1 BYTE), 
                          ROW2 CHAR(1 BYTE), 
                          RECORD_TEXT VARCHAR2(200 BYTE), 
                          RECORD_NUMBER NUMBER
                       ) 
                       ORGANIZATION EXTERNAL 
                       ( 
                          TYPE ORACLE_LOADER
                          DEFAULT DIRECTORY FILE_DIRECTORY
                          ACCESS PARAMETERS
                          ( 
                            RECORDS …
Run Code Online (Sandbox Code Playgroud)

sql plsql oracle11g

2
推荐指数
1
解决办法
102
查看次数

在pl/sql代码中调用TO_DATE时要注意的确切异常

我有下面的代码to_date('1311313', 'yymmdd')实际上抛出异常说invalid month.哪个可以管理

exception
when others then
  sop('date format is wrong');
Run Code Online (Sandbox Code Playgroud)

这里的问题是一切都会被捕获,我不想做,好像会发生其他错误,然后它也会传递消息date format is wrong.我也不想创建用户定义的异常.只是想知道哪个异常正在被抛出,以便我可以在我的代码中使用,如下所示

exception
when name_of_exception then
  sop('date format is wrong');
Run Code Online (Sandbox Code Playgroud)

oracle plsql exception to-date

2
推荐指数
1
解决办法
1万
查看次数