2016-11-24 1 views
-3

のは、私はこのkshのを持っているとしましょう作るために:どのように無名ブロックは仕事

$ORACLE_HOME/bin/sqlplus -s u/p <<EOF 
    WHENEVER OSERROR EXIT 98; 
    WHENEVER SQLERROR EXIT SQL.SQLCODE; 

    set heading on 
    set feedback on 
    set echo on 
    set pagesize 0 

    SELECT field1 FROM MY.TABLE; 
EOF 

選択が行われます

DECLARE 
    VARIABLE VARCHAR2(2) := 99 
BEGIN 
    prompt before select 
    SELECT field1 INTO VARIABLE FROM MY.TABLE; 
    prompt after select 
    EXIT NUMCARSAT; 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     prompt NO_DATA_FOUND 
     EXIT 99; 
    WHEN TOO_MANY_ROWS THEN 
     prompt TOO_MANY_ROWS 
     EXIT 99; 
END; 
:それは

のは、クエリの周り無名ブロックを追加してみましょう大丈夫です

クエリはもう実行されません。何故ですか ? SQLで

+0

を:

第二に、あなたはDECLARE/BEGIN/END PL/SQLブロック、または他のSQL * Plusは、このように、複数の入力を待ちます後に別の行に単一のスラッシュを追加する必要がありますSELECT ... FROM ...はできませんが、INTOが必要です:select ... INTO ... FROM ... – Aleksej

+0

ここでPLSQLの基本をお読みください。 http://www.tutorialspoint.com/plsql/plsql_basic_syntax.htm – XING

+0

ok ..私はコードを変更するつもりです。なぜなら私は最小限のコードを書いているからです。 – mlwacosmos

答えて

0

単にあなたのクエリを実行することができます。

SQL> select 1 from dual; 

     1 
---------- 
     1 

しかし、PLSQLブロック内で、あなたは、カーソルを構築するためにあなたのクエリを使用してループを行い、いくつかの変数にデータをフェッチする必要があります...例えば

:あなたが使用

SQL> begin 
    2 select 1 from dual; 
    3 end; 
    4/
    select 1 from dual; 
    * 
ERROR at line 2: 
ORA-06550: line 2, column 3: 
PLS-00428: an INTO clause is expected in this SELECT statement 


SQL> declare 
    2 a number; 
    3 begin 
    4 select 1 into a from dual; 
    5 end; 
    6/

PL/SQL procedure successfully completed. 
0

構文は、Oracle PLSQLで使用されていません。右の構文は以下の通りです:

DECLARE 
    VAR VARCHAR2(2) := 99 ; 
BEGIN 
    dbms_output.put_line('before select'); 

    SELECT field1 
    INTO VAR 
    FROM MY.TABLE; 

    --dbms_output.put_line is used to print to console 
    dbms_output.put_line('before select'); 
    dbms_output.put_line('value ='||var); 

EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
     dbms_output.put_line('NO_DATA_FOUND'); 
    WHEN TOO_MANY_ROWS THEN 
     dbms_output.put_line('TOO_MANY_ROWS '); 
END; 
0

まず、あなたの構文が無効であるので、あなたは、PL/SQLブロック内の「プロンプト」ステートメントを使用することはできません。中

BEGIN 
    DBMS_OUTPUT.PUT_LINE('none of this will be parsed until slash below appears on standard input'); 
END; 
/
関連する問題