create or replace PROCEDURE P_STAGE_LOAD(
in_S IN VARCHAR2,
in_D IN VARCHAR2,
in_T IN VARCHAR2)
IS
v_ERRM VARCHAR2(32000);
BEGIN
IF in_TBL_NAME ='TRAN_CUSTOMER' THEN
EXECUTE immediate 'INSERT INTO TRAN_CUSTOMER
(CUSTOMER_ID,AUTH_ID,OTHER_ID,TRAN_TYPE,AUDIT_TS)
SELECT CUSTOMER_ID,AUTH_ID,OTHER_ID,NVL(TRAN_TYPE,'PRIMARY'),
SYSDATE
FROM '||in_S||'.'||in_T||'@'||in_D;
EXECUTE immediate 'COMMIT';
这会在运行时给出Invalid Identifier
错误。但是SELECT查询运行良好。
我想处理NULL
的{{1}},并在TRAN_TYPE
时解码为PRIMARY
。
目标表NULL
将此列为TRAN_CUSTOMER
列。
有什么遗漏吗?
答案 0 :(得分:1)
您需要为PRIMARY
使用两个单引号,因为第一个单引号结束EXECUTE IMMEDIATE
字符串。
在该行中使用类似下面的内容。
EXECUTE immediate 'INSERT INTO TRAN_CUSTOMER
(CUSTOMER_ID,AUTH_ID,OTHER_ID,TRAN_TYPE,AUDIT_TS)
SELECT CUSTOMER_ID,AUTH_ID,OTHER_ID,NVL(TRAN_TYPE,''PRIMARY''),
SYSDATE
FROM '||in_S||'.'||in_T||'@'||in_D;