Oracle SQL Update作为.NET的参数(存储过程)字符串传递

时间:2012-11-20 14:38:29

标签: asp.net sql oracle sql-update

我想知道如何完成这项任务。我看过CASE,DECODE或IF条件,但我无法使其正常工作。我的目标是将一个由ASP.NET数据构造的预定义列/值对块传递给我的Oracle存储过程。我试图只更新许多列中的某些列以保留其他不需要更新的列。所以这是我的设置:

存储过程:

UpdateSelectedColumns(myValuePairString, updatedBy)

-- Passed variable from ASP.NET, myValuePairString = 'col1 = 10,col2 = 'Dog''

-- update statement final
UPDATE MyTable   
       SET
       col1 = 10,
       col2 = 'Dog'
       col3 = 'john';
COMMIT;

提前谢谢你......

瑞奇

1 个答案:

答案 0 :(得分:1)

有一次我会建议不要使用存储过程。这里没有必要使用存储过程。

因为它是您的存储过程将盲目地接受其参数并执行更新而不添加任何值。此外,通过使用此过程,您可以排除使用绑定并将自己暴露给错误(每当您使用引用'鼓励值时),性能损失和SQL注入漏洞。

如果将aribtrary字符串作为参数并将其放入动态游标中,PL / SQL(简单透明绑定,透明使用和游标重用,严格的静态SQL解析和元数据依赖性)的优点都毫无意义。

最好使用语言本机游标并使用绑定变量。

如果您真的想使用PL / SQL,请将您的单个参数替换为几个表。一个用于列名,一个用于变量值。然后,您可以使用DBMS_SQL来解析语句并使用适当的绑定变量。您需要一些约定才能解析日期,数字和字符值。您需要从数据库中读取元数据以检查数据类型。这将是很多代码,没有一点价值。