2012-11-20 57 views
1

我想知道如何完成此任务。我看过CASE,DECODE或IF条件,我无法使它工作。我的目标是将从ASP.NET数据构建的预定义列/值对传递给我的Oracle存储过程。我试图只更新许多列中的某些列来保留其他不需要更新的列。因此,这里是我的设置:Oracle SQL更新作为参数传入(存储过程)字符串从.NET

存储过程:

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

这一次我要奉劝不要使用存储过程。使用存储过程没有意义。

因为它是你的存储过程会盲目地接受它的参数并执行更新而不添加任何值。此外,通过使用此过程,您可以排除使用绑定并将自己公开给错误(无论何时您使用引用值'来鼓励值),性能受到影响和SQL注入漏洞。

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

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

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

相关问题