标签: plsql

Oracle 10g - ORA-01747错误

我的程序:

CREATE OR REPLACE PROCEDURE akcia_nepozicane_s_kurzorom
    (denny_poplatok IN NUMBER,
     kilometrovy_poplatok IN NUMBER)
AS
    my_id_auto NUMBER(5);
    my_poplatok_denny NUMBER(4);
    my_poplatok_km NUMBER(2);
    CURSOR c1 IS
        SELECT id_auto, poplatok_denny, poplatok_km FROM Auta;
BEGIN
    OPEN c1;
    LOOP
        FETCH c1 INTO my_id_auto, my_poplatok_denny, my_poplatok_km;
        EXIT WHEN c1%NOTFOUND;
        IF my_poplatok_km >= 10 THEN
            UPDATE Auta SET
                poplatok_denny = denny_poplatok,
                poplatok_km = kilometrovy_poplatok
            WHERE id_auto = my_id_auto;
        ELSE
            UPDATE Auta SET
                poplatok_denny = denny_poplatok,
            WHERE id_auto = my_id_auto;        
        END IF;
        COMMIT;
    END LOOP;
    CLOSE c1;
END;
Run Code Online (Sandbox Code Playgroud)

当我尝试在Oracle 10g …

oracle plsql ora-01747

0
推荐指数
1
解决办法
2087
查看次数

触发新旧列

为什么我们不能在语句级触发器中使用:new和:old列?

sql oracle triggers plsql oracle10g

0
推荐指数
1
解决办法
543
查看次数

在oracle中,显式游标是否将整个查询结果加载到内存中?

我有一张大约10亿行的表.我是唯一的用户,所以没有争用锁等等.我注意到当我运行这样的东西时:

DECLARE   
  CURSOR cur IS SELECT col FROM table where rownum < N; 
BEGIN
  OPEN cur;
  LOOP
    dbms_output.put_line("blah")
  END LOOP;
  CLOSE cur;
END;
Run Code Online (Sandbox Code Playgroud)

我点击输入的时间和输出开始流入的时间之间存在滞后.如果N很小,那么它是无关紧要的.对于大N(或没有WHERE子句),这种滞后大约是几小时.

你可以告诉我,我是oracle的新手,我假设游标只是在表中保留一个指针,它们会在循环的每次迭代中更新.所以我没想到滞后与执行迭代的表的大小成比例.这是错的吗?游标在迭代之前加载整个查询结果吗?

有没有办法在没有初始开销的情况下逐行迭代表?

sql oracle plsql cursors

0
推荐指数
1
解决办法
1144
查看次数

ORACLE:我们可以在存储过程中创建全局临时表或任何表吗?

下面是我写的存储过程:

create or replace procedure test005
as
begin

CREATE GLOBAL TEMPORARY TABLE TEMP_TRAN 
( 
COL1 NUMBER(9), 
COL2 VARCHAR2(30), 
COL3 DATE 
) ON COMMIT PRESERVE ROWS 

/
INSERT INTO TEMP_TRAN VALUES(1,'D',sysdate); 

INSERT INTO TEMP_TRAN VALUES(2,'I',sysdate); 

INSERT INTO TEMP_TRAN VALUES(3,'s',sysdate); 

COMMIT;
end;
Run Code Online (Sandbox Code Playgroud)

当我执行它时,我收到一条错误消息,提到:

create or replace procedure test005
as
begin

CREATE GLOBAL TEMPORARY TABLE TEMP_TRAN 
( 
COL1 NUMBER(9), 
COL2 VARCHAR2(30), 
COL3 DATE 
) ON COMMIT PRESERVE ROWS 

/
INSERT INTO TEMP_TRAN VALUES(1,'D',sysdate); 

INSERT INTO TEMP_TRAN VALUES(2,'I',sysdate); 

INSERT INTO TEMP_TRAN VALUES(3,'s',sysdate); 

COMMIT;
end; …
Run Code Online (Sandbox Code Playgroud)

oracle toad plsql ora-00955

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

ORA-06502:PL/SQL:数字或值错误:使用Oracle聚合函数时字符串缓冲区太小

美好的一天大师,

我有一个脚本定期填充表崩溃并给出上述错误.奇怪的是,它已经在生产系统上运行了近3个月,没有任何问题,上周突然崩溃了.据我所知,这些表格没有任何变化.

有没有人遇到过这样的事情?我相信它与我在其中实现的聚合函数有关; 但它最初起作用了.

请; 请将我开发的脚本部分附加到我认为给出错误的过程中.

创建或替换程序V1

- 宣布

    v_a       VARCHAR2(4000);
    v_b       VARCHAR2(4000);
    v_c       VARCHAR2(4000);
    v_d       VARCHAR2(4000);
    v_e       VARCHAR2(4000);
    v_f       VARCHAR2(4000);
    v_g       VARCHAR2(4000);
    v_h       VARCHAR2(4000);
    v_i       VARCHAR2(4000);
    v_j       VARCHAR2(4000);
    v_k       VARCHAR2(4000);
    v_l       VARCHAR2(4000);
    v_m       VARCHAR2(4000);
    v_n       NUMBER(10);
    v_o       VARCHAR2(4000);
Run Code Online (Sandbox Code Playgroud)

-
- 填充DEMO表的过程

        BEGIN

              -- Delete all from the DEMO table
              DELETE FROM DEMO;

              -- Populate fields in DEMO from DEMOV1
              INSERT INTO DEMO(ID, D_ID, CTR_ID, C_ID, DT_NAM, TP, BYR, ENY,
                               ONG, SUMM, DTW, REV, LD, MD, STAT, CRD)
              SELECT ID, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql aggregate-functions

0
推荐指数
1
解决办法
7848
查看次数

PL/SQL:ORA-00933命令未正确结束

你好我尝试这个查询:

DECLARE
v_week NUMBER;

BEGIN
SELECT WEEK FROM WEEKDESTINATION INTO (v_week)
WHERE STARTDATE BETWEEN '02-JAN-2010'AND '09-JAN-2010';
END;
Run Code Online (Sandbox Code Playgroud)

但它会引发以下错误:PL/SQL:ORA-00933:SQL命令未正确结束

请帮忙

sql plsql ora-00933

0
推荐指数
1
解决办法
1143
查看次数

Oracle:将"5-"存储为数字

简短版本:将"5-"作为一个数字转换为表格作为数字的最佳方法是什么?

长版:这是问题,我有一个表,我正在读取由VARCHAR2组成的主要表.我从一些字段中获取数据并将其存储在另一个表中而不进行修改.在一个字段中,我得到"5-"并试图将其存储在NUMBER字段中,该字段抛出错误,因为它无法将其转换为数字.

谁能告诉我是否有最佳实践来处理这样的数据?这似乎是一个常见的财务问题.我相信我可以删除'-'s然后如果发现它贴在前面但我想输入最好的处理方法.

sql oracle plsql

0
推荐指数
1
解决办法
93
查看次数

PL/SQL问题:通过业务对象报告选择时不是有效月错误

这可能并不像应该的那样复杂,但Business Objects似乎对SQL Developer的使用方式非常非常严格.这是有问题的陈述的一部分:

ship_date between '01' || '-' || w_current_ora_month || '-' || to_char(to_date(w_last_day, 'DD-MON-RR HH:MI:SS AM'), 'yy') and to_char(to_date(w_last_day, 'DD-MON-RR HH:MI:SS AM'))
Run Code Online (Sandbox Code Playgroud)

w_current_ora_month VARCHAR2(3)通过以下方式填写:

SELECT to_char(sysdate,   'MON')
  INTO w_current_ora_month
  FROM dual;
Run Code Online (Sandbox Code Playgroud)

w.last_day DATE通过以下方式填写:

SELECT trunc(LAST_DAY('01' || '-' || w_current_ora_month || '-' || to_char(w_year)))
    into w_last_day
    from dual
Run Code Online (Sandbox Code Playgroud)

从Business Objects中提取时为什么会出现"无效月"错误?我已经发现Business对象在类型上是严格的,所以我想知道我在这里做错了什么.所有这些在SQL开发人员中运行良好,但我不得不一遍又一遍地调整此语句,以便在Business Objects使用它时尝试使其工作.

oracle plsql business-objects date-arithmetic

0
推荐指数
1
解决办法
1768
查看次数

如何从Oracle-Procedure中获得一个?

我有这个程序:

CREATE OR REPLACE PROCEDURE CONV1(
    pDate   IN  VARCHAR2,
    pYear  OUT number,
    pMonth OUT number,
    pDay   OUT number
)
AS
    lDate   DATE;
BEGIN
    lDate := to_date(pDate, 'DD.MM.YYYY HH24:MI:SS');
    pYear := to_number(to_char(lDate, 'YYYY'));
    pMonth := to_number(to_char(lDate, 'MM'));
    pDay := to_number(to_char(lDate, 'DD'));

END CONV1;
/
Run Code Online (Sandbox Code Playgroud)

如果我只想要其中一个出局,我该如何调用此程序?(喜欢Select FMAN_STAT_CONV1('16.07.2010', pDay) from dual;(这不是工作顺便说一句))

格尔茨!

sql oracle toad plsql

0
推荐指数
1
解决办法
113
查看次数

在Oracle PLSQL上打印等效项

在Oracle SQL Developer中执行以下块时

set serveroutput on format wraped;
begin
  DBMS_OUTPUT.put_line('the quick brown fox jumps over the lazy dog');
end;
Run Code Online (Sandbox Code Playgroud)

您收到以下回复

anonymous block completed
the quick brown fox jumps over the lazy dog
Run Code Online (Sandbox Code Playgroud)

我基本上尝试使用PRINT,因此我可以跟踪PLSQL代码的进度.

如何摆脱超级烦人的烦恼anonymous block completed?

sql oracle plsql

0
推荐指数
1
解决办法
3014
查看次数