質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Oracle

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

PL/SQL

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

SQL

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

Q&A

2回答

1956閲覧

PL/SQLでSEQUENCE を再作成

plue

総合スコア71

Oracle

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

PL/SQL

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

SQL

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

0グッド

1クリップ

投稿2018/06/12 08:29

編集2018/06/12 08:38

PL/SQLでSEQUENCEを再作成しようとしています。
やりたいことは
0. Aテーブルで100000~800000の間で最大のseqの値を取得
0. 取得したseqに+1をする
0. seqの値を初期値として、再度SEQを作成する

SQL

1DECLARE 2 lastNumberTmp NUMBER; -- SEQ_ZD034MST01の現在値 3 4BEGIN --実行の始まり 5 6 SELECT max(seq) into lastNumberTmp from A where seq between 100000 and 800000; 7 lastNumberTmp := lastNumberTmp + 1; 8 -- *********************************************** 9 -- *  シーケンス再生成 * 10 -- *********************************************** 11 DROP SEQUENCE "ZDUSER"."SEQ_A"; 12 CREATE SEQUENCE "ZDUSER"."SEQ_A" MINVALUE lastNumberTmp MAXVALUE 900000 INCREMENT BY 1 START WITH 200000 CACHE 20 NOORDER NOCYCLE NOPARTITION; 13 14 DBMS_OUTPUT.PUT_LINE('seqの現在値'); 15 DBMS_OUTPUT.PUT_LINE(lastNumberTmp); 16 17 COMMIT; 18 19 20END; --実行の終わり 21/ 22

しかし、以下のエラーが出てしまいます。

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:

ネットで検索しましたがイマイチよくわからないので、どなたかご教示いただけると助かります。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2018/06/12 08:35

PLSQL → PL/SQL です。固有名詞はきちんと覚えましょう。[PL/SQL]タグも追加してください。
guest

回答2

0

DROP SEQUENCE, CREATE SEQUENCE はDMLではなく、DDLなのでPL/SQLではEXECUTE IMMEDIATE文 を使う必要があります。
DROP SEQUENCE, CREATE SEQUENCE するとその SEQUENCE を使っているOracle Object の STATUS が 'INVALID' になってしまうので、安全のためコンパイルしておきたいです。

STATUS が 'INVALID'にならないように、EXECUTE IMMEDIATE でALTER SEQUENCE を使っては?

投稿2018/06/12 08:45

Orlofsky

総合スコア16415

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

トランザクション内でdropはできませんって言われていそうです。
dropしたらロールバックできませんし、DDLなのでそういうものです。

ネットでどのように検索されたか分かりませんが、
「pls-00103 drop」で検索すると上のほうに出てきます。
http://d.hatena.ne.jp/nakazawaken1/20070315/1173936554

投稿2018/06/12 08:50

szk.

総合スコア1400

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問