如何使用动态sql分配变量

时间:2017-10-27 03:47:07

标签: oracle variables dynamic-sql

我需要为动态sql分配两个变量(tmp_x和tmp_y),因为我需要在运行时选择正确的表。 sql如下:

 updateSql:= 'select p.gis_x,p.gis_y into tmp_x,tmp_y from  publish_'
             ||splitCollection(indexs).city_no ||'.t_customer p 
             where p.customer_id=:1 and p.gis_x is not null and p.gis_y is not null';

 execute immediate updateSql using splitCollection(indexs).CUSTOMER_ID;

编译没问题,但是发生了关于“缺少关键字”的运行时错误,我该如何解决?

1 个答案:

答案 0 :(得分:1)

所以,在评论之后:

此:

 updateSql:= 'select p.gis_x,p.gis_y into tmp_x,tmp_y from  publish_'
             ||splitCollection(indexs).city_no ||'.t_customer p 
             where p.customer_id=:1 and p.gis_x is not null and p.gis_y is not null';

 execute immediate updateSql using splitCollection(indexs).CUSTOMER_ID;

需要成为:

 updateSql:= 'select p.gis_x,p.gis_y from  publish_'
             ||splitCollection(indexs).city_no ||'.t_customer p 
             where p.customer_id=:1 and p.gis_x is not null and p.gis_y is not null';

 execute immediate updateSql using splitCollection(indexs).CUSTOMER_ID RETURNING into tmp_x,tmp_y;

不同之处在于into子句,当与execute immediate一起使用时,它应该包含在实际语句中,而不是Select语句的一部分。

干杯