如何读取 pl/sql 过程中的值?

Posted

技术标签:

【中文标题】如何读取 pl/sql 过程中的值?【英文标题】:How read a value in pl/sql procedure? 【发布时间】:2015-10-25 12:58:59 【问题描述】:

我在扫描 pl/sql 过程中的值时遇到问题。当我执行该过程时,它会忽略 a:='&a'; .

程序主体

create or replace PROCEDURE Testing
IS
a VARCHAR2(3);
BEGIN
  DBMS_OUTPUT.PUT_LINE('Enter a : ');
  a:='&a';
END Testing;

过程调用

SET SERVEROUTPUT ON;
cl scr;
Execute Testing;

输出

PL/SQL procedure successfully completed.

Enter a : 

有人可以帮帮我吗!?

【问题讨论】:

您的define 设置是什么(在SQL Developer 中使用show 检查)? PL/SQL 不是为用户交互而设计的,提示输入值是不寻常的,并且在存储过程中并不实用。您当然不能使用dbms_output 作为提示,因为它(如您所见)在块执行结束后显示。您可以使用promptaccept 客户端命令,但不能在PL/SQL 中使用。很难说你真的想做什么。 我明白你的意思,但 SHOW 命令不起作用。我已经通过this。 该链接不适用于 Oracle 数据库;试试this one。以及 set define command 将其设置为 &,如果它处于关闭状态。 请注意,替换变量的“&”前缀在 SQL*Plus (set/show define) 中是可配置的。也许更重要的是,在您的示例中,所有这些都在提示输入一个将永久编译到过程中的值(编译后检查过程源)。 PL/SQL 在数据库中运行,除了作为 Forms 或 Apex 等工具的一部分之外,它不是交互式的。 【参考方案1】:

在 SQL*Plus 中,我们有提示和接受语法,但是没有使用 php、Apex、Java、脚本的直接方法来使 PL/SQL 交互。我给你一个脚本的例子。

例如在 Windows 批处理中,以下代码会有所帮助。

1) 测试程序的代码与您所拥有的相同

create or replace PROCEDURE  Testing (arg varchar2)
IS
a VARCHAR2(3);
BEGIN
a:=arg;
  DBMS_OUTPUT.PUT_LINE('Value of a : '||a);

END

2) 测试.bat

sqlplus nd211/nd211 @Testing.sql te1
sqlplus nd211/nd211 @Testing.sql te4

3)Testing.sql

set serveroutput on
exec Testing('&1');
exit;

测试; /

4) 样本输出

Value of a : te1

PL/SQL procedure successfully completed.


Value of a : te4

PL/SQL procedure successfully completed.

【讨论】:

如果这回答了您的问题,请告诉我 是的!这就是我想做的。谢谢老兄。

以上是关于如何读取 pl/sql 过程中的值?的主要内容,如果未能解决你的问题,请参考以下文章

从 oracle PL/SQL 查看变量的值

如何在 Oracle 中调试 PL/SQL 集合的值?

将 XML 数据存储在表中的 PL/SQL 过程抛出错误(23,102):PL/SQL:ORA-00907:缺少右括号

pl/sql 过程中的排序表失败

从 PL/SQL 中的过程返回值数组

pl/sql:如果可能出现异常,如何放置所有行的值?