1

我想知道如何完成这项任务。我查看了 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;

先感谢您...

瑞奇

4

1 回答 1

1

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

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

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

您最好使用您的语言本地游标并使用绑定变量。

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

于 2012-11-20T15:03:22.403 回答