質問編集履歴

2 カテゴリの追加

plue

plue score 87

2018/06/12 17:38  投稿

PLSQLでSEQUENCE を再作成
PL/SQLでSEQUENCE を再作成
PLSQLでSEQUENCEを再作成しようとしています。
PL/SQLでSEQUENCEを再作成しようとしています。
やりたいことは
0. Aテーブルで100000~800000の間で最大のseqの値を取得
0. 取得したseqに+1をする
0. seqの値を初期値として、再度SEQを作成する
```SQL
DECLARE
  lastNumberTmp NUMBER; -- SEQ_ZD034MST01の現在値
BEGIN --実行の始まり
   SELECT max(seq) into lastNumberTmp from A where seq between 100000 and 800000;
   lastNumberTmp := lastNumberTmp + 1;
   -- ***********************************************
   -- *  シーケンス再生成   *
   -- ***********************************************
   DROP SEQUENCE  "ZDUSER"."SEQ_A";
   CREATE SEQUENCE "ZDUSER"."SEQ_A" MINVALUE lastNumberTmp MAXVALUE 900000 INCREMENT BY 1 START WITH 200000 CACHE 20 NOORDER NOCYCLE NOPARTITION;
   DBMS_OUTPUT.PUT_LINE('seqの現在値');
   DBMS_OUTPUT.PUT_LINE(lastNumberTmp);
   COMMIT;
   
END; --実行の終わり
/
```
しかし、以下のエラーが出てしまいます。
```
ND; --実行の終わり
エラー・レポート -
ORA-06550: 行11、列5:
PLS-00103: 記号"DROP"が見つかりました。 次のうちの1つが入るとき:
(
  begin case declare end exception exit for goto if loop mod
  null pragma raise return select update while with
  <an identifier> <a double-quoted delimited-identifier>
  <a bind variable> << continue close current delete fetch lock
  insert open rollback savepoint set sql execute commit forall
  merge pipe purge
06550. 00000 - "line %s, column %s:\n%s"
*Cause:   Usually a PL/SQL compilation error.
*Action:
```
ネットで検索しましたがイマイチよくわからないので、どなたかご教示いただけると助かります。
  • Oracle

    1142 questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

  • SQL

    5723 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

  • PL/SQL

    121 questions

    PL/SQL (Procedural Language/Structured Query Language) はOracle CorporationによるSQL(非手続き型言語)を手続き型言語に拡張させるために開発されたプログラミング言語です。

1 コード誤りがあったため

plue

plue score 87

2018/06/12 17:32  投稿

PLSQLでSEQUENCE を再作成
PLSQLでSEQUENCEを再作成しようとしています。
やりたいことは
0. Aテーブルで100000~800000の間で最大のseqの値を取得
0. 取得したseqに+1をする
0. seqの値を初期値として、再度SEQを作成する
```SQL
DECLARE
  lastNumberTmp NUMBER; -- SEQ_ZD034MST01の現在値
BEGIN --実行の始まり
   SELECT max(seq) into lastNumberTmp from A where seq between 100000 and 800000;
   lastNumberTmp := lastNumberTmp + 1;
   -- ***********************************************
   -- *  シーケンス再生成   *
   -- ***********************************************
   DROP SEQUENCE  "ZDUSER"."SEQ_A";
   CREATE SEQUENCE "ZDUSER"."SEQ_A" MINVALUE last_number MAXVALUE 900000 INCREMENT BY 1 START WITH 200000 CACHE 20 NOORDER NOCYCLE NOPARTITION;
   CREATE SEQUENCE "ZDUSER"."SEQ_A" MINVALUE lastNumberTmp MAXVALUE 900000 INCREMENT BY 1 START WITH 200000 CACHE 20 NOORDER NOCYCLE NOPARTITION;
   DBMS_OUTPUT.PUT_LINE('seqの現在値');
   DBMS_OUTPUT.PUT_LINE(lastNumberTmp);
   COMMIT;
   
END; --実行の終わり
/
```
しかし、以下のエラーが出てしまいます。
```
ND; --実行の終わり
エラー・レポート -
ORA-06550: 行11、列5:
PLS-00103: 記号"DROP"が見つかりました。 次のうちの1つが入るとき:
(
  begin case declare end exception exit for goto if loop mod
  null pragma raise return select update while with
  <an identifier> <a double-quoted delimited-identifier>
  <a bind variable> << continue close current delete fetch lock
  insert open rollback savepoint set sql execute commit forall
  merge pipe purge
06550. 00000 - "line %s, column %s:\n%s"
*Cause:   Usually a PL/SQL compilation error.
*Action:
```
ネットで検索しましたがイマイチよくわからないので、どなたかご教示いただけると助かります。
  • Oracle

    1142 questions

    Oracleは、米オラクルが取り扱うリレーショナルデータベース管理システムです。メインフレームからPCまで、多様なプラットフォームに対応しています。

  • SQL

    5723 questions

    SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

思考するエンジニアのためのQ&Aサイト「teratail」について詳しく知る