0

Oracle 11g 64 ビットおよび sqldeveloper 4.0 を使用しています。以下のSQLスクリプトを実行しようとしています:

variable  v_sak_id NUMBER; 
variable  v_idNum varchar; 
exec :v_idNum := 'A1111200';
select sak_id into :v_sak_id from MemerId where idNum= :v_idNum;

エラー メッセージの取得:

使用法: VAR[IABLE] [ [ NUMBER | CHAR | CHAR (n [CHAR|BYTE]) | VARCHAR2 (n [文字|バイト]) | NCHAR | NCHAR (n) | NVARCHAR2 (n) | CLOB | NCLOB | リカーソル | BINARY_FLOAT | BINARY_DOUBLE ] ]

匿名ブロックが完了しました コマンドの行 : 6 から始まるエラー - idNum= :v_idNum の MemerId から :v_sak_id に sak_id を選択します エラー レポート - SQL エラー: ORA-01006: バインド変数が存在しません 01006. 00000 - 「バインド変数が存在しません」 *原因:
*アクション:

何か助けはありますか?

4

3 に答える 3

2
  1. 文字列変数を宣言するときは、その変数のサイズを指定する必要があります。

  2. 今のところvarcharとは同義語ですが、 use datatatypevarchar2は使用しないでください。Oracle は、データ型を別のデータ型として再定義する予定です。 varcharvarchar2varchar

  3. select intoステートメントが Pl/SQL で使用されていることは既に説明済みであるため、ブロックselect内にステートメントを配置するか、コマンドを使用してステートメントを実行する必要があります。begin endselectexecbegin end

例(タイプミスがあり、テーブルの名前は である必要があると思いますがmemBerid、とにかく。そのままにしておきます。):

create table  memerid(
 sak_id number,
 idNum varchar2(123)
);

insert into MemerId(sak_id, idNum)
  values(1, 'A1111200');

commit;

variable  v_sak_id number; 
variable  v_idNum  varchar2(123); 

exec :v_idNum := 'A1111200';
exec select sak_id into :v_sak_id from MemerId  where idNum= :v_idNum;

print v_sak_id;

結果:

table MEMERID created.
1 rows inserted.
committed.
anonymous block completed
anonymous block completed

V_SAK_ID
-
1
于 2013-09-15T20:05:06.987 に答える
0

SELECT ... INTO ...SQL ではなく、PL/SQL 構文です。SQL Developer で実行しているので、そのまま使用できselect sak_id from MemerId where idNum= :v_idNum;、v_idNum の値を求めるプロンプトが表示されます。バインド変数を使用した追加の実行では、以前の値が保持されますが、変更することもできます。

于 2013-09-15T19:07:13.110 に答える
0

次のようなものを試してください

variable  v_sak_id NUMBER; 
variable  v_idNum varchar; 
exec :v_idNum := 'A1111200';

begin
   select sak_id into :v_sak_id from MemerId where idNum= :v_idNum;
end;

つまり、select ... into構文/ステートメントは、PL/SQL ブロックで囲む必要があります。これは、ステートメントを に埋め込むことによって実現されますbegin .. end

于 2013-09-15T19:10:22.007 に答える