oracle execute immediate 单引号嵌套,Oracle EXECUTE IMMEDIATE语句里面的引号处理

例子中的语句使用动态SQL创建了一个存储过程

将单引号 '改写为两个单引号 ''

BEGIN

EXECUTE IMMEDIATE 'create or replace PROCEDURE SMDP_CLEAN_SUBSCRIPTIONS AS

CURSOR subscriptions_cur

IS

SELECT * FROM SMDP_SUBSCRIPTIONS where N_STATUS = 5;

TYPE subscriptions_aat IS TABLE OF subscriptions_cur%ROWTYPE

INDEX BY PLS_INTEGER;

l_subscriptions subscriptions_aat;

limit_in Number(10,0);

STATUS_LOADED integer :=3;

STATUS_ERROR integer :=4;

STATUS_GARBAGE integer :=5;

CURSOR CUR_SUB is

-- ALL subscriptions with status LOADED (=> check if their profile are still in DEMO mode)

select s.N_SUBSCRIPTION_ID, s.N_STATUS, p.C_MNO_TRIGRAM, p.C_PROFILE_ID

from SMDP_SUBSCRIPTIONS s, SMDP_SUBSCRIPTION_PROFILES p where (s.N_STATUS=STATUS_LOADED or s.N_STATUS=STATUS_ERROR) and p.N_SUBSCRIPTIONPROFILE_ID=s.N_SUBSCRIPTIONPROFILE_ID;

TYPE res_table IS TABLE OF CUR_SUB%ROWTYPE;

res res_table;

oaps_param varchar2(40);

oaps_value varchar2(40);

BEGIN

OPEN CUR_SUB;

FETCH CUR_SUB BULK COLLECT INTO res;

FOR indx IN 1 .. res.COUNT LOOP

oaps_param:=''profile.''||res(indx).C_MNO_TRIGRAM||''.''||res(indx).C_PROFILE_ID||''.mode'';

dbms_output.put_line(''id=''||res(indx).N_SUBSCRIPTION_ID||'' status=''||res(indx).N_STATUS||'' oaps=''||oaps_param);

-- Get OAPS parameter associated with its profile

begin

oaps_value := ''PROD'';

select UPPER(C_PARAM_VALUE) into oaps_value from OAPS_PARAMETERS where C_PRODUCT_TYPE=''SMDP'' and C_PARAM_NAME=oaps_param;

dbms_output.put_line(''FlagMode=''||oaps_value);

-- if no param found, (PROD, DEMO or PROD_RETRY??), do nothing...

exception when NO_DATA_FOUND then null;

end;

-- if subscription is as LOADED and not in demo mode then set the status to READY_TO_GARBAGE

IF oaps_value <> ''DEMO'' THEN

update SMDP_SUBSCRIPTIONS set N_STATUS=STATUS_GARBAGE where SMDP_SUBSCRIPTIONS.N_SUBSCRIPTION_ID=res(indx).N_SUBSCRIPTION_ID;

dbms_output.put_line(''Set to GARBAGE'');

END IF;

end loop;

CLOSE CUR_SUB;

limit_in := 1000;

OPEN subscriptions_cur;

LOOP

FETCH subscriptions_cur

BULK COLLECT INTO l_subscriptions LIMIT limit_in;

FORALL indx IN 1 .. l_subscriptions.COUNT

delete from SMDP_SUBSCRIPTIONS where N_SUBSCRIPTION_ID = l_subscriptions(indx).N_SUBSCRIPTION_ID;

commit;

FORALL indxDiversified IN 1 .. l_subscriptions.COUNT

delete from SMDP_DIVERSIFIED_SCRIPTS where N_SUBSCRIPTION_ID = l_subscriptions(indxDiversified).N_SUBSCRIPTION_ID;

commit;

EXIT WHEN l_subscriptions.COUNT < limit_in;

END LOOP;

CLOSE subscriptions_cur;

END SMDP_CLEAN_SUBSCRIPTIONS;';

END;

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值