oracle 10g pl/sqlブロックでユーザーからランタイム入力を取得したい(つまり、ユーザーとの対話型通信)可能ですか?
declare
x number;
begin
x=&x;
end
&はOracle 10gでは使用できないため、このコードではエラーが発生します。
ユーザー入力を読み取り、後で使用するために変数に保存するには、sqlplusコマンドACCEPT
を使用できます。
Accept <your variable> <variable type if needed [number|char|date]> Prompt 'message'
例
accept x number Prompt 'Please enter something: '
そして、次のようにPL/SQLブロックでx
変数を使用できます。
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
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;
あなたもこれを試すことができますそしてそれは動作します:
DECLARE
a NUMBER;
b NUMBER;
BEGIN
a :=: a; --this will take input from user
b :=: b;
DBMS_OUTPUT.PUT_LINE('a = '|| a);
DBMS_OUTPUT.PUT_LINE('b = '|| b);
END;
これは、間違った値を割り当てるために次の行を使用したためです。
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;
/
`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 integer:=&a変数aに整数を入力します。