标签: plsql

Oracle 10 - 查询短路评估

Oracle 10是否支持短路评估查询?如果是,有一些特殊的钥匙可供使用吗?

oracle plsql

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

每天工作安排几个小时

我需要安排从0600到1800的工作.工作应该每两个小时后运行一次.例如0800,1000,1200,1400,1600,1800.

这是我到目前为止设法完成的代码:

DECLARE
     l_id binary_integer;
     begin
       sys.dbms_job.submit(job => l_id, what => 'integration_export;', interval => 'TRUNC(SYSDATE,''hh24'')+0/24/60');
       sys.dbms_output.put_line(l_id);    
end; 
Run Code Online (Sandbox Code Playgroud)

当然,这将在每2小时后运行一次,而不是在1801 - 0759停止.我怎么能添加这个限制?我要做的一件事是创建另一个计划程序,该程序在1801处唤醒并在此时间点更改为此作业.但是,我想知道这是不是一个好主意.

有什么建议?

提前致谢 :-)

oracle jobs plsql scheduling oracle11g

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

Oracle 11g:在将新TYPE声明为TABLE时,我必须添加"INDEX BY PLS_INTEGER"吗?

添加INDEX BY PLS_INTEGER和不在新表类型声明结束之间的差异是什么.看看这个例子:

DECLARE
    GC_BULK_LIMIT CONSTANT INTEGER := 500;
    CURSOR CUR_CLIENTS IS SELECT C.ID, C.NAME FROM CLIENTS C;
    TYPE RT_CLIENTS IS TABLE OF CUR_CLIENTS%ROWTYPE;
    -- TYPE RT_CLIENTS IS TABLE OF CUR_CLIENTS%ROWTYPE INDEX BY PLS_INTEGER;
    LT_CLIENTS RT_CLIENTS;
BEGIN
    OPEN CUR_CLIENTS;
    LOOP
        FETCH CUR_CLIENTS BULK COLLECT INTO LT_CLIENTS LIMIT GC_BULK_LIMIT;
        EXIT WHEN LT_CLIENTS.COUNT = 0;
        FOR I IN 1..LT_CLIENTS.COUNT LOOP
            -- ... SOME LOGIC
        END LOOP;
    END LOOP;
    CLOSE CUR_CLIENTS;
END;
Run Code Online (Sandbox Code Playgroud)

plsql oracle11g

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

Oracle SQL group by column with count,但仅当列为null或0时

简而言之,我正在尝试按列进行分组,但仅当该列不是null或者0在这种情况下我仍然想要获取这些行,但只是没有分组.我有这张桌子some_table:

+--------+----------+---------------------+-------+
| id     | other_id | date_value          | value |
+--------+----------+---------------------+-------+
| 1      | abc      | 2011-04-20 21:03:05 | 104   |
| 2      | abc      | 2011-04-20 21:03:04 | 229   |
| 3      | xyz      | 2011-04-20 21:03:03 | 130   |
| 4      | abc      | 2011-04-20 21:02:09 | 97    |
| 5      | 0        | 2011-04-20 21:02:08 | 65    |
| 6      | xyz      | 2011-04-20 21:02:07 | 101   |
| 7 …
Run Code Online (Sandbox Code Playgroud)

sql oracle plsql group-by

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

不存在而不是存在

我正在优化一些SQL查询(这可以被认为是我最近发布的问题的第2部分)并用NOT EXISTS谓词替换了一些NOT IN

我是否正确地认为这样做的主要好处是,使用NOT EXISTS可以获得声明在找到单个匹配时终止的好处,但是对于计数子查询而言,NOT IN将需要进行全表扫描?

如果选择的数据包含NULL,NOT IN似乎还需要额外的工作,这是正确的吗?

在我在proc中实现它们之前,我需要确保第二个语句比这两个案例中的第一个语句(和功能上等效的)更好:

情况1:

        --exclude sessions that were tracked as part of a conversion during the last response_time minutes
        -- AND session_id NOT IN (SELECT DISTINCT tracked_session_id    
        --                              FROM data.conversions WITH (NOLOCK)
        --                              WHERE client_id = @client_id
        --                              AND utc_date_completed >= DATEADD(minute, (-2) * cy.response_time, @date)
        --                              AND utc_date_completed <= @date     
        --                              AND utc_date_clicked <= @date)

        AND NOT EXISTS (SELECT 1
                            FROM data.conversions WITH (NOLOCK)
                            WHERE client_id = @client_id
                            AND utc_date_completed >= DATEADD(minute, (-2) …
Run Code Online (Sandbox Code Playgroud)

sql sql-server optimization plsql

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

PL/SQL检查日期有效

如果我DDMM在PL/SQL中有一个日期格式,我想验证它.这样做的正确方法是什么?

DD是一天,MM是飞蛾.

For an example:
0208 - is a valid date
3209 - is not a valid date
0113 - is not a valid date.
Run Code Online (Sandbox Code Playgroud)

oracle validation plsql date

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

来自dbms_metadata.get_ddl的自定义表DDL

我想要DDL表格,以便我可以使用UTLOracle中的Package 将它放到数据库服务器上.

问题是:当我们

select dbms_metadata.get_ddl('TABLE','Table_name','Schema_Name') 
  from dual; 
Run Code Online (Sandbox Code Playgroud)

我得到一个包含CLOB之前的输出CREATE.喜欢

"(CLOB) 
  CREATE TABLE "SCHEMA"."TABLE_NAME" 
   (TABLE_COLUMNS.....) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 
 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "INTF_DATA01" ;"
Run Code Online (Sandbox Code Playgroud)

我要的是上面DDL没有CLOB,没有的参数,例如SEGMENT CREATION,PCTFREE...等等.

很高兴得到建议.

oracle rdbms plsql database-administration oracle11g

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

SQL将数据从下划线分隔转换为CamelCase

我想更改下划线分隔的字符串:

my_underscore_separated_string
Run Code Online (Sandbox Code Playgroud)

进入CamelCase:

MyUnderscoreSeparatedString
Run Code Online (Sandbox Code Playgroud)

使用SQL语句.执行此转换的最佳方法是什么(在Oracle的表中)?

我可以将下划线与REGEXP_REPLACE匹配,但是无法更改反向引用的情况.INSTR/SUBSTR操作只允许我一次转换一个下划线.

oracle plsql camelcasing

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

带有游标的pl/sql varray

有人能告诉我这段代码有什么问题.我的目标是编写一个传递员工姓名的程序,将员工表中的所有姓名和工资加载到VARRAY中,然后在屏幕上打印出姓名和工资.

CREATE OR REPLACE PROCEDURE VARRAY_Q2 
(
  PNAME IN VARCHAR2  
, PSAL OUT NUMBER  
) AS 

--declare and create cursor

CURSOR emp_cur IS
SELECT ename,sal
FROM EMP;

  TYPE varray_emp IS VARRAY(14) OF emp_Cur%ROWTYPE;

  --Creating new instance of varray
  x_varray_emp varray_emp := varray_emp();
  v_counter NUMBER := 0;

BEGIN

  x_varray_emp.EXTEND;

  FOR empRecs IN emp_Cur LOOP

  --Insert data into the varray
  x_varray_emp(v_counter) := empRecs;

  dbms_output.put_line(v_counter);

  v_counter := v_counter + 1;
  END LOOP;

  --Loop through the varray and print out all the elements
  FOR …
Run Code Online (Sandbox Code Playgroud)

database oracle plsql plsqldeveloper

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

PL/SQL函数返回没有值

我写下面FUNCTION检查给出的reference number是存在的.

FUNCTION find_reference_no(
    p_ref_no IN VARCHAR2) RETURN VARCHAR2
AS

  v_ref_no varchar2(50);

BEGIN

  select REF_NO into v_ref_no from cash where REF_NO = p_ref_no;  
  EXCEPTION
    WHEN no_data_found THEN
    v_ref_no := '#';

RETURN v_ref_no;    

END;
Run Code Online (Sandbox Code Playgroud)

我把这个函数叫做了AFTER INSERT TRIGGER.当我插入数据时,我得到了错误

ORA-06503: PL/SQL: Function returned without value

我怎么解决这个问题?

PS:我没有在cash表格中插入数据.我正在将数据插入另一个表(假设它是表B)并在其中调用此函数(表B)AFTER INSERT TRIGGER.

oracle plsql function oracle11g

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