我的程序:
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 …
我有一张大约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的新手,我假设游标只是在表中保留一个指针,它们会在循环的每次迭代中更新.所以我没想到滞后与执行迭代的表的大小成比例.这是错的吗?游标在迭代之前加载整个查询结果吗?
有没有办法在没有初始开销的情况下逐行迭代表?
下面是我写的存储过程:
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) 美好的一天大师,
我有一个脚本定期填充表崩溃并给出上述错误.奇怪的是,它已经在生产系统上运行了近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) 你好我尝试这个查询:
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命令未正确结束
请帮忙
简短版本:将"5-"作为一个数字转换为表格作为数字的最佳方法是什么?
长版:这是问题,我有一个表,我正在读取由VARCHAR2组成的主要表.我从一些字段中获取数据并将其存储在另一个表中而不进行修改.在一个字段中,我得到"5-"并试图将其存储在NUMBER字段中,该字段抛出错误,因为它无法将其转换为数字.
谁能告诉我是否有最佳实践来处理这样的数据?这似乎是一个常见的财务问题.我相信我可以删除'-'s然后如果发现它贴在前面但我想输入最好的处理方法.
这可能并不像应该的那样复杂,但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使用它时尝试使其工作.
我有这个程序:
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;(这不是工作顺便说一句))
格尔茨!
在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?