13

我想在 Oracle 10g PL/SQL 块中获取用户的运行时输入(即与用户的交互通信)。是否可以?

declare
x number;
begin
x=&x;
end

此代码给出错误为

& 不能在 oracle 10g 中使用

4

11 回答 11

25

要读取用户输入并将其存储在变量中以供以后使用,您可以使用 SQL*Plus 命令ACCEPT

Accept <your variable> <variable type if needed [number|char|date]> prompt 'message'

例子

accept x number prompt 'Please enter something: '

然后您可以x在 PL/SQL 块中使用该变量,如下所示:

declare 
  a number;
begin
  a := &x;
end;
/

使用字符串示例:

accept x char prompt 'Please enter something: '

declare 
  a varchar2(10);
begin
  a := '&x';   -- for a substitution variable of char data type 
end;           -- to be treated as a character string it needs
/              -- to be enclosed with single quotation marks
于 2012-09-20T16:52:14.407 回答
3

你也可以试试这个,它会起作用的:

DECLARE
  a NUMBER;
  b NUMBER;
BEGIN
  a := &aa; --this will take input from user
  b := &bb;
  DBMS_OUTPUT.PUT_LINE('a = '|| a);
  DBMS_OUTPUT.PUT_LINE('b = '|| b);
END;
于 2019-06-19T14:04:05.813 回答
1
    a number;
    b number;
    begin
    a:= :a;-- instead of "&" use ":" here 
    b:= :b;
    if a>b then
    dbms_output.put_line('Large number is '||a);
    else
    dbms_output.put_line('Large number is '||b);
    end if;

end;

实际上,当我尝试此操作时,它运行良好,实际上“&”给出了错误,因此您可以使用“:”。

希望你得到答案:)

于 2021-12-30T14:56:37.860 回答
0

那是因为您使用以下行来分配错误的值。

x=&x;

在 PL/SQL 中,分配是使用以下方法完成的。

:=

所以你的代码应该是这样的。

    declare
    x number;
    begin
    x:=&x;
-- Below line will output the number you received as an input
    dbms_output.put_line(x);
    end;
    /
于 2017-07-23T08:59:11.187 回答
0
declare
a number;
b number;
begin
a:= :a;
b:= :b;
if a>b then
dbms_output.put_line('Large number is '||a);
else
dbms_output.put_line('Large number is '||b);
end if;
end;
于 2017-09-27T03:51:31.777 回答
0
`DECLARE
c_id customers.id%type := &c_id;
c_name customers.name%type;
c_add customers.address%type;
c_sal customers.salary%type;
a integer := &a`   

这里c_id customers.id%type := &c_id; 语句输入表中已定义类型的 c_id 并声明整数:= &a只需在变量 a 中输入整数。

于 2018-08-23T06:25:15.733 回答
0
SQL> DECLARE
  2     a integer;
  3     b integer;
  4  BEGIN
  5     a:=&a;
  6     b:=&b;
  7     dbms_output.put_line('The a value is : ' || a);
  8     dbms_output.put_line('The b value is : ' || b);
  9  END;
 10  /
于 2021-01-04T06:11:38.927 回答
0

您可以使用它来获取和打印提示值:

    set SERVEROUTPUT ON;

   /
     accept v_x number prompt 'Please enter something: '
    declare 
            v_x NUMBER;
    begin
            v_x := &v_x;
            dbms_output.put_line('the entered value was : '  ||  v_x); 
    end;
    
    /
于 2021-03-30T11:35:07.507 回答
0

如果您尝试在 livesql 中执行此操作,请阅读此内容。据我所知,这在 livesql 上是不可能的。我真的想不出一个用例,但无论如何,您可以在 livesql 中记录反馈,团队将查看请求。

于 2021-06-02T01:37:42.977 回答
-4

试试这个

declare 
  a number;
begin
  a := :a;
dbms_output.put_line('Inputed Number is >> '|| a);
end;
/  

OR

declare 
  a number;
begin
  a := :x;
dbms_output.put_line('Inputed Number is >> '|| a);
end;
/
于 2015-09-26T04:32:07.747 回答
-7

它非常简单

写吧:

//首先创建一个名为test的表......

create table test (name varchar2(10),age number(5));

//当您运行上面的代码时,将创建一个表......

//现在我们必须插入一个名字和一个年龄..

确保将通过打开一个寻求我们帮助在其中输入值的表单来插入年龄

insert into test values('Deepak', :age);

//现在运行上面的代码,你会得到“插入1行”的输出...

/现在运行选择查询以查看输出

select * from test;

//仅此而已..现在我认为没有人对接受用户数据有任何疑问...

于 2013-02-12T17:54:46.463 回答