求助:关于动态组合
oracle存储过程参数
假设存储过程名字SP_TEST,一个参数v_SQL,是sql语句
存储过程内容:
v_id number;
v_id := 11111; --这个可能事动态从表取得的值
execute immediate v_SQL;
在Java代码中组合参数:
sql = "insert into b (id,code) values(1,'||v_id||')";
执行存储过程,这个时候存储过程把v_id看做一个字符串而不是存储过程变量
这个问题该怎么解决?
------解决方案--------------------
方法:
1。存储过程参数只传变量值,存储过程拼sql字符串。
2。java拼完整的sqll字符串,之后把完整字符串作为变量传给存储过程。
很多东西可以变通的。能完成就ok了。
------解决方案--------------------
那把你要传递的sql语句分成两部分,一部分是变量前的东西,一部分是变量后的东西。
在prodedure中跟其中的变量重新组合,不就解决了吗.
------解决方案--------------------
设计存在缺陷!
虽说有缺陷,但是还有方法:
在procedure中通过变量替换:把传过来的sql字符串进行对于变量的替换,类似replace(str,替代变量字符串,变量值)。
转换完成后,再execute immediate sql;