你好,这个oracle程序:
SP_DELETE_FROM_TABLE(pTableName in VARCHAR2, pFieldName in VARCHAR2,pFieldValue in VARCHAR2,pFieldType in VARCHAR2)
我想知道的是fieldtype参数是什么?
我的意思是我可以
queryString := 'DELETE FROM' ||pTableName|| 'WHERE pFieldName = pFieldValue' ;
EXECUTE IMMEDIATE queryString USING pFieldName, pFieldValue;
正确?我在这里错过了什么?有人可以帮忙吗?谢谢!
答案 0 :(得分:3)
表名不能是参数,因此您必须将其替换为字符串。这就像你的例子,除了你需要在它周围放置空格,如@are所说:
queryString := 'DELETE FROM ' || pTableName || ' WHERE...
^ space here ^ and here
列名也不能是参数。
您要替换的字段值是参数,因此需要(1)名称和(2)前面的冒号。我将其命名为thing
,因此名称明显不同于proc的pFieldValue
参数:
queryString := 'DELETE FROM ' || pTableName || ' WHERE ' || pFieldName || ' = :thing';
^ parameter
USING
的{{1}}部分用于提供参数值,句点。查询有一个参数,因此EXECUTE IMMEDIATE
提供一个值:
USING
第一个参数(EXECUTE IMMEDIATE queryString USING pFieldValue;
)的值为thing
。
还有一件事:许多人(包括我)认为通用的“删除行”程序是不好的做法。而不是代码中的编译器检查语句......
pFieldValue
...你有一些不可检查的东西 - 如果它错了它会在运行时失败:
DELETE FROM myTable WHERE myField = pFieldValue;
如果你必须这样做怎么办?
SP_DELETE_FROM_TABLE('myTable', 'myField', 'badidea');
您是否延长了DELETE FROM myTable WHERE myValue BETWEEN 10 AND 12;
程序,还是写了另一个程序?这个程序是一个很好的练习,但在真实应用程序中使用它之前请三思而后行。
那就是说,有时候你 使用SP_DELETE_FROM_TABLE
进行这样的操作(例如,如果通过DB链接访问表)。明智地使用它:)