如何读取 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
作为提示,因为它(如您所见)在块执行结束后显示。您可以使用prompt
和accept
客户端命令,但不能在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 过程中的值?的主要内容,如果未能解决你的问题,请参考以下文章