2011-07-24 79 views
2

我是PL SQL过程的新手,我们在存储过程的执行部分中有这行代码。在存储过程中使用EXECUTE IMMEDIATE用于DML语句

我在这里有一个查询,请告诉我什么使用EXECUTE IMMEDIATE DML语句在这里?在什么情况下我们应该使用EXECUTE IMMEDIATE

v_update_query2 := 'INSERT INTO '||p_country||'.DETAILS (ID, STATUS, DEST_SYSTEM, OUT_TIME) VALUES (''' 
    ||v_txn_id ||''','||'''T081'''||','||'''CLEARING'''||', SYSDATE)'; 



EXECUTE IMMEDIATE v_update_query1 ; 

回答

3

EXECUTE IMMEDIATE是拥有模式对象变量引用的唯一途径 - 如表名,字段名等

它允许你建立任何字符串,然后执行该字符串作为SQL声明。
没有它,程序变量只能用于SQL值,例如select * from table where column = my_variable

在您的例子中,表名正在由p_country变量提供 - 这是一个架构元素,所以你需要EXECUTE IMMEDIATE

+0

波希米亚语是完全正确的,不管怎样,您还应该研究文档中的动态SQL,并使用绑定变量替换文字,以提高SQL注入的性能和安全性。 – Ollie

+0

您不能用动态sql替换对动态sql中的模式对象的引用,所以'p_country'仍然是一个问题。在SQL Server中,我会在'p_country'上使用'quotename'来使其安全。我不知道在甲骨文的土地上是否相等。 –

相关问题