【问题标题】:PL/SQL code using :1, :2, :3 and so onPL/SQL 代码使用 :1, :2, :3 等等
【发布时间】:2011-12-16 05:01:06
【问题描述】:

这段代码是什么意思,你怎么称呼这个方法? 我如何知道 :1、:2、:3 等的值是多少?


(PL/SQL 过程)

UPDATE tablename
SET column = :1, column = :2, column = :3, column = :4, column= :5....

【问题讨论】:

    标签: sql oracle stored-procedures plsql bind-variables


    【解决方案1】:

    那些是bind variables。 Oracle 将它们替换为传递的实际值。这些通常在您使用 Dynamic SQLEXECUTE-IMMEDIATEOPEN-FOR-USING 作为 mentioned by Phil 时找到。

    如果您想知道那里保存了哪些值,您可能需要查找UPDATE 语句的发布位置,并将它们记录到UPDATE 语句之前的日志/调试表中

    【讨论】:

    • 我想我现在看到了。更新语句在立即执行之前先执行,这有点奇怪。你碰巧知道为什么会这样做吗?谢谢。
    • 立即执行准备更新语句 - 这就是您看到绑定变量的原因。一旦准备好,就提交参数,然后运行更新语句。 @mysticfalls
    【解决方案2】:

    这是在 SQL*Plus 中吗?

    如果是这样,它们是参数占位符。 SQL*Plus 将在执行时提示您输入值。

    如果您来自 SQL 客户端/编程语言(Java、PHP、C# 等),这些通常表示准备好的语句中的参数,但我不确定仅数字占位符是否有效。

    更新

    这也可能出现在使用OPEN-FOR-USING 语句执行的动态 SQL 中。没有看到更多你的代码,我只是猜测。

    【讨论】:

    • +1。您可能会补充说,这称为“参数化查询”,它有助于避免 SQL 注入并保持代码更简洁。
    • @Phil 哦,对不起,我错过了那部分。它是一个 PL/SQl 包
    • @KenWhite 这就是我要使用“准备好的声明”的地方。一些不错的阅读 herehere
    • @Phil 如果它是一个 pl/sql 过程,那么值来自哪里?在此之前是否应该有一个查询,或者它是否被定义为一个变量?我检查了其中一些,但变量的数量似乎不匹配。
    • @Phil:我知道。 :) 但问题是询问该语句类型的具体名称,即parameterized query。我按原样赞成您的回答,只是提出了一个补充建议。 :)
    猜你喜欢
    • 2023-04-05
    • 1970-01-01
    • 2011-04-28
    • 2021-10-20
    • 2016-06-10
    • 2017-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多