execute immediate v_sql无权限问题

创建一个简单同步数据的存储过程,在执行时总是报错

SQL> exec data_sync(p_table_name => 'test0701',p_begin_date => '2019-06-02 00:00:00',p_end_date   => '2019-06-03 00:00:00');
BEGIN data_sync(p_table_name => 'test0701',p_begin_date => '2019-06-02 00:00:00',p_end_date   => '2019-06-03 00:00:00'); END;

*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "DATA_SYNC", line 32
ORA-06512: at line 1

需要执行的语句为

 v_sql := 'insert /*+ append parallel(ilmtest.' || p_table_name ||
           ',4) */ into ilmtest.' || p_table_name ||
           ' select /*+ parallel(i,4) */ * from ilmtest.' || p_table_name ||
           '@link i where i.msgtime>=' || v_begin_msgtime || ' and i.msgtime<' ||
           v_end_msgtime;

   dbms_output.put_line(v_sql);
   execute immediate v_sql;

生成的语句直接执行可以成功

SQL> insert /*+ append parallel(ilmtest.test0701,4) */ into ilmtest.test0701 select /*+ parallel(i,4) */ * from ilmtest.test0701@link i where i.msgtime>=1559318400000 and i.msgtime<1559404800000;

299 rows created.

Elapsed: 00:00:00.54

SQL> commit;

Commit complete.

查询文档发现 execute immediate 必须有显示的赋权,而用户的角色权限在这里不起作用。。。

给用户授权后发现执行成功,记录一下

SQL> grant insert on ilmtest.test0701 to testuser;

Grant succeeded.


SQL> exec data_sync(p_table_name => 'test0701',p_begin_date => '2019-06-02 00:00:00',p_end_date   => '2019-06-03 00:00:00');

PL/SQL procedure successfully completed.

Elapsed: 00:00:00.41
SQL> select count(*) from ilmtest.test0701;

  COUNT(*)
----------
      1317

参考

https://blog.csdn.net/royzhang7/article/details/51172413

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hehuyi_In

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值