Oracle 我如何调整我的过程以绕过确切的获取返回多个请求的数字
我上面的过程有一个IN参数,它接受诸如“p”之类的值。如果输入值为“P” 然后从表TEMP_L中选择CUR_DATE和TGT_TAB作为两个单独的变量V_DATE和V_TAB,其中两列返回空值。对于返回true的记录,然后应用此逻辑,如果变量V_TAB从TGT_TAB获取记录,='TEMP_V'我意识到它可能返回多个记录和不同的记录,这就是为什么我请求帮助然后插入。。否则插入 现在问题来了,我的SELECT INTO变量只能保存1个值,有时可能会有多个记录返回null,并且在TGT_选项卡中具有不同的值。有时是临时的,有时是临时的等等 如何更改脚本以成功运行脚本的底部? 由于将返回多个记录,我的变量将返回错误:exact fetch返回多个请求的数字。我尝试使用批量收集,但收集只在循环中工作,我不确定如何将其应用于我的以下要求。我需要根据返回值插入它们,'TEMP_V','TEMP_T',基本上如此Oracle 我如何调整我的过程以绕过确切的获取返回多个请求的数字,oracle,plsql,plsqldeveloper,Oracle,Plsql,Plsqldeveloper,我上面的过程有一个IN参数,它接受诸如“p”之类的值。如果输入值为“P” 然后从表TEMP_L中选择CUR_DATE和TGT_TAB作为两个单独的变量V_DATE和V_TAB,其中两列返回空值。对于返回true的记录,然后应用此逻辑,如果变量V_TAB从TGT_TAB获取记录,='TEMP_V'我意识到它可能返回多个记录和不同的记录,这就是为什么我请求帮助然后插入。。否则插入 现在问题来了,我的SELECT INTO变量只能保存1个值,有时可能会有多个记录返回null,并且在TGT_选项卡中具有
CREATE OR REPLACE PROCEDURE SP_PROC (
V_P IN VARCHAR2 DEFAULT NULL)
AS
V_DATE TIMESTAMP:=SYSDATE;
V_TAB VARCHAR2(10);
BEGIN
IF V_P = 'P' THEN
SELECT CUR_DATE, TGT_TAB
INTO V_DATE, V_TAB
FROM TEMP_L
WHERE P='P'
AND END_TIME IS NULL
AND COMPLETE_IND IS NULL;
EXECUTE IMMEDIATE 'TRUNCATE TABLE '||V_TAB;
IF V_TAB = 'TEMP_V' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_V';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
END IF;
IF V_TAB = 'TEMP_T' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_T';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
END IF;
END;
任何帮助都可以。您必须决定如何处理在select中返回多行的情况。是否要处理所有行?最后一排?第一排?一旦做出决定,您可以使用FOR循环或OPEN…FETCH…CLOSE循环来处理TEMP_L中的相应行。尝试以下操作:
IF V_TAB = 'TEMP_V' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_V';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
END IF;
IF V_TAB = 'TEMP_T' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_T';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB
END IF;
这将使用光标循环替换原始代码中的单例选择,该循环允许处理与选择条件匹配的所有行
分享和享受。我将使用最早的当前日期。它将是如下所示。选择当前日期,TGT\U选项卡进入V\U日期,V_TAB FROM TEMP_L,其中P='P'和END_TIME为NULL,COMPLETE_IND为NULL,START_TIME=选择MINCUR_DATE FROM TEMP_L,其中END_TIME为NULL,COMPLETE_IND为NULL和PARA='P';你能给我举个例子吗?
CREATE OR REPLACE PROCEDURE SP_PROC (
V_P IN VARCHAR2 DEFAULT NULL)
AS
BEGIN
IF V_P = 'P' THEN
FOR aRow IN (SELECT CUR_DATE, TGT_TAB
FROM TEMP_L
WHERE P='P'
AND END_TIME IS NULL
AND COMPLETE_IND IS NULL)
LOOP
EXECUTE IMMEDIATE 'TRUNCATE TABLE '|| aRow.TGT_TAB;
IF aRow.TGT_TAB = 'TEMP_V' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB;
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_V';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB;
END IF;
IF aRow.TGT_TAB = 'TEMP_T' THEN
INSERT INTO TEMP_V
SELECT V FROM REP_TAB;
ELSE
EXECUTE IMMEDIATE 'TRUNCATE TABLE TEMP_T';
INSERT INTO TEMP_V
SELECT V FROM REP_TAB;
END IF;
END LOOP;
END IF;
END SP_PROC;