2016-06-28 9 views
0

皆さん、こんにちは皆さんはPL/SQLを使い慣れていませんが、DBMS_output.Put_lineを使用して2つの数字を入力して表示するように。 しかし、私は以下、コンパイル・エラーが発生しますが、私は、 "OracleのSQL Developerの"SQLの開発者を使用してPL/SQLでユーザ入力を出力

SET SERVEROUTPUT ON SIZE 1000000;

DECLARE n_no_1 number(8,2); n_no_2 number(8,2); BEGIN

DBMS_output.put_line('Enter Value for no 1'); &n_no_1; DBMS_output.put_line('Enter value for no 2'); &n_no_2;

DBMS_OUTPUT.PUT_LINE('The value of No 1 is' || n_no_1);

DBMS_OUTPUT.PUT_LINE('The value of No 2 is' || n_no_2);

を使用しています、私のコードです

END;

/

答えて

0

これらの2行は、あなたの問題は、しかし、ではない他の回答で述べた理由のために:

&n_no_1;

&n_no_2;

SQLでは、あなたが何かをトリガするためにアンパサンド(&)を使用することができますマクロ置換と呼ばれます。

コンパイラがこのようなもの(例えば&n_no1)に遭遇すると、コンパイラはその場所の代わりに値を入力するようにユーザに求めます。

"Hello"と入力してください。あなたのコードは次のようになります。

DBMS_output.put_line('Enter Value for no 1'); 
Hello; 

そして、あなたはちょうどそれを入力した場合は、失敗すること、見ることができますように。あなたが何をしたいか

はこのように、変数にその値を割り当てることです:

n_no_1 := '&n_no_1'; 

これにより、「置き換え」されることを:

n_no_1 := 'Hello'; 

コンパイルした - と実行されます - ちょうど良い。

これはこれを行うための最良の方法ではありませんが、これは学習エクササイズのようですが、

PROMPTACCEPTのキーワードを参照してください。あなたは滑らかな印象の方法で最初の値をキャプチャするために(あなたのBEGIN/DECLARE/ENDブロックの外側)SQLのものを使用することができます:)

http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve032.htm#SQPUG052

http://docs.oracle.com/cd/E11882_01/server.112/e16604/ch_twelve005.htm#SQPUG026

良い読み取り、ここで追加のリンクは価値が見つかり。あなたが見ているものよりも多くを説明したが、それは、置換変数、および他の似もの(および他のいくつかの無関係なもの:))

私があなたに同意

https://blogs.oracle.com/opal/entry/sqlplus_101_substitution_varia

+0

コンパイルは今すぐsuccessfulyです少しコードを変更しますが、私はアウトを入れないでください?このコードは 'SERVEROUTPUT ON SIZE 1000000になりました。 DECLARE n_number1 number(8,2):=&n_number1; n_number2 number(8,2):=&n_number2; BEGIN DBMS_OUTPUT.PUT_LINE(n_number1); DBMS_OUTPUT.PUT_LINE(n_number2); END; /' –

+0

申し訳ありませんが、それは最初から間違っています。 「マクロ置換」は「SQLでは」ありません。マクロ置換は、SQL DeveloperなどのSQLPlusおよびそれに基づく他のフロントエンドの機能です。 SQL Developerは、処理のためにテキスト・ストリング(PL/SQLプログラム)をインタプリタ(「コンパイラ」)に送信する前に置換を行います。マシューの答えは正しいが、あなたのことは間違っている。 – mathguy

+0

@dittoこれは私が始めの前にやったことで、 'n_number1 number(8,2):=&n_number1;' –

0

&variable構文は、PL/SQLではありません。これはSQL Developerの一部です。私は、あなたがやろうとしていることと構文エラーを見ていますが、最終的にはうまくいかないので、修正する必要はありません。

理由は:実行時にPL/SQLを介してユーザー入力を受け入れることができないためです。

+0

は '&'構文ではありませんについて説明しますPL/SQLの一部ですが、このチュートリアルでは、SQLの開発者を介してユーザー入力にアクセスすることがわかります。最初のコードを実行してhttp://www.plsqltutorial.com/plsql-nested-block/を参照してください。 –

+0

"理由PL/SQL経由でユーザー入力を受け入れることはできません。申し訳ありませんが、これは完全に真実ではありません。マクロ置換を使用すると、「PL/SQLによるユーザー入力を受け入れる」ことができます。それはかなりではありませんが、それはあなたを許可します。 – Ditto

+0

彼らはクライアントの(例えば、SQL Developer)の '&'構文を使用して、コンパイル時に_値を収集して設定しています。あなたの例では、ユーザ入力を収集しようとしているようです。匿名のPL/SQLブロックでは、コンパイル時と実行時間が非常に近い場合がありますが、違いがあります。 –

関連する問題