Oracle PL/SQLプロシージャを作成し、Oracle JDBC(Thin Driver)経由で実行しようとしています。Oracle JDBC ThinドライバからのPL/SQL Begin/Endプロシージャの実行
begin
for i in (select owner, constraint_name, table_name from all_constraints where owner = 'SCHEMA' and status = 'ENABLED') LOOP
execute immediate 'alter table SCHEMA.'||i.table_name||' disable constraint SCHEMA.'||i.constraint_name||'';
end loop;
end;
/
begin
for i in (select table_name from all_tables where owner = 'SCHEMA') LOOP
execute immediate 'truncate table SCHEMA.'||i.table_name||'';
end loop;
end;
/
begin
for i in (select owner, constraint_name, table_name from all_constraints where owner = 'SCHEMA' and status = 'DISABLED') LOOP
execute immediate 'alter table SCHEMA.'||i.table_name||' enable constraint SCHEMA.'||i.constraint_name||'';
end loop;
end;
/
Javaでは、私は '/'で分割しているので、それぞれのbegin endブロックは別々の文で実行されます。ステートメントを実行するためのJavaコードは次のとおりです。
CallableStatement c = dbc.getConnection().prepareCall(sqlStatement);
c.executeUpdate();
私は次のエラーを受信しています:
java.sql.SQLSyntaxErrorException: ORA-00933: SQL command not properly ended
ORA-06512: at line 3
は、どのように私はこれをフォーマットし、JDBCでPL/SQLを実行していますか?
更新:明確にするために、3つのステートメントはすべて、分割された '/'区切り文字なしで実行されます。
更新: Oracleサーバーには、次のバージョンである:Oracle Database 11gリリース11.2.0.1.0 - 64ビットの生産
私は投稿のコードに問題が表示されません。 SQL文がセミコロンで終わっていることを確認してください。セミコロンが必要なので、スラッシュは存在してはいけません。 – Codo
Codoのコメントをチェックしてください。「スラッシュは存在してはいけません。 – Olaf
私は、CallableStatementで更新を実行したときに '/'が実際には存在しないことを示す質問を更新しました。 – abargnesi