2016-07-28 7 views
1

を実行し、ここでのコード」オラクル、私はテーブルにランダム生成データを挿入しようとしている即時挿入

​​

テーブルempが3列あり - idnameidmgrを、

問い合わせの上で実行中即時ステートメントは次のようになります。

insert into emp values (13,'name25',193); 

このブロックは実行されませんでした。 eステートメント(f.e.

Execute immediate 'insert into emp values ('||prac_seq.nextval||','''||'name23'','||trunc(dbms_random.value(1,300))||');'; end; Error report: ORA-00911: invalid character ORA-06512: at line 3 00911. 00000 - "invalid character" *Cause: identifiers may not start with any ASCII character other than letters and numbers. $#_ are also allowed after the first character. Identifiers enclosed by doublequotes may contain any character other than a doublequote. Alternative quotes (q'#...#') cannot use spaces, tabs, or carriage returns as delimiters. For all other contexts, consult the SQL Language Reference Manual. *Action:

そして、なぜ:

begin 
    Execute immediate 'insert into emp values ('||prac_seq.nextval||','''||'name23'','||trunc(dbms_random.value(1,300))||');' 
end; 
    /

ORAは私にエラーを与えて? Commas、quotes ..すべてがチェックされ、上質です。

+1

この場合、ネイティブ動的SQL( 'execute immediate')を使用する必要はありません - 静的SQLを使用してください。 –

+0

直前にJUSt 2000の挿入文を使用します。それは...多くの時間がかかります。動的SQL - 7.54秒で!そうです - 必要があります。 –

答えて

1

動的クエリから;を削除してみてください。

+0

愚かな...私はこのカンマに集中していたので、私はそれを逃した。ありがとう!! –

3

なぜこのために即時実行を使用していますか?レベルで接続してみてください。

select prac_seq.nextval, 'name'||level, trunc(dbms_random.value(1,300)) as rnd 
from dual 
connect by level <= 300; 
+1

いいです。ありがとう!しかし、まだ - なぜエラーがありますか? –

関連する問題