PL/SQLについての質問です。
カーソルデータ(emp_rec(i))を、TABLE変数(emp_ins(i))に代入して、代入されたTABLE変数を使用して、DML処理を行うことは可能ですか?
エラーを解読し対処を行っても、エラーが発生してしまいます。
どうか、ご教授お願いします。
下記を実行すると、下記エラーが発生します。
-実行結果------------------------------------
DECLARE
*
行1でエラーが発生しました。:
ORA-06502: PL/SQL: 数値または値のエラーが発生しました
ORA-06512: 行127
-エラー番号解読-----------------------------------------
●エラー名:
PL/ SQL: 数値または値のエラーstring が発生しました
●原因:
算術、数値、文字列、変換または制約エラーが発生しました。たとえば、NULL 値をNOT NULL で宣言した変数に割り当てようとした場合、または100 以上の整数をNUMBER( 2) で宣言した変数に割り当てようとした場合にこのエラーが発生します
●処置:値が制約違反をしないように、データ、操作方法または宣言方法を変更してください。
-ソース------------------------------------
DECLARE
--カーソル定義
CURSOR emp_cur IS
SELECT a,b,c FROM emp
TYPE emptabtype IS TABLE OF emp%ROWTYPE
INDEX BY PLS_INTEGER;
emp_rec emptabtype;
/* 処理対象データ格納変数 */
-- insert作業用
emp_ins emptabtype;
ins_count NUMBER := 1;
BEGIN
/* empカーソルオープン・フェッチ・クローズ */
OPEN emp_cur;
FETCH emp_cur BULK COLLECT INTO emp_rec;
CLOSE emp_cur;
/* (挿入)処理対象のデータを、処理対象データ格納変数に格納する。 */
FOR i IN emp_rec.FIRST..emp_rec.LAST LOOP
--挿入するレコードを格納
emp_ins(ins_count) := emp_rec(i);
ins_count := ins_count + 1;
END LOOP;
/* DML処理 */
-- 挿入する
FOR count_ins IN emp_ins.FIRST..emp_ins.LAST LOOP
INSERT INTO temp VALUES(emp_ins(count_ins).a
,emp_ins(count_ins).b
,emp_ins(count_ins).c);
END LOOP;
COMMIT;
END;
/
A 回答 (3件)
- 最新から表示
- 回答順に表示
No.3
- 回答日時:
emp_ins emptabtype; を TABLE OFとかなんとかってしないと
配列にならないんじゃなかったけ?
最近は
MERGEとか INSERT ALLでカーソル回さなくても
DMLだけで処理できることがおおいので
あんまり自信ないけれど。。。。
No.1
- 回答日時:
ええと、軽くしか読んでないのですがempテーブルの中に値が代入されないでinsertもしくはupdateされてる気がするのですが、普通スキーマの定義でNULL禁止にするとか、デフォルト値を設定するとか何かしておくものじゃ無いのかなと思うのですが・・・。
この回答への補足
下記、DML処理部分を下記に修正しても、上記エラーが発生しました。回答者様がおっしゃる。emp_insに値が入っていないということですかね。
/* DML処理 */
-- 挿入する
FOR count_ins IN emp_ins.FIRST..emp_ins.LAST LOOP
dbms_output.put_line(count_ins);
END LOOP;
*/
下記のように、カーソル結果セットを、table変数に代入する事は出来ない。
ということでよろしいでしょうか?お願いします。。
--更新用するレコードを格納
emp_ins(ins_count) := emp_rec(i);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonリストの特定の値を表示htmlで表示できない 2 2022/05/14 05:48
- Visual Basic(VBA) access count数を変数に格納 2 2022/03/30 19:21
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) 1つの入力フォルダの値を読み込み、3分割をして新しい変数に代入する方法を教えていただきたいです。 読 4 2022/10/17 20:52
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Visual Basic(VBA) 前回ご教授いただいたコードに覚えたてのループ処理で品名りんごAから順に20回for nextでループ 7 2023/01/13 22:01
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Visual Basic(VBA) ACCESS DAO で不要なテーブルのフィールド(列)の削除 4 2022/06/23 12:13
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
PL/SQLのコンパイルエラーにつ...
-
CASE文のエラーについて
-
PL/SQL PLS-00103エラーについて
-
「ORA-00907: 右カッコがありま...
-
PCC-S-02201エラーの対処を教え...
-
データベースのカラムの型がCHA...
-
dmpファイルのインポート時にで...
-
DATABSE LINKについて
-
オラクル表領域データファイル...
-
【PL/SQL】SQL文が長すぎてSELE...
-
HAVING句でのBETWEEN演算子
-
トリガーのエラー
-
ストアドファンクションの実行
-
はじめまして!
-
PL/SQLによるCREATE TABLE後のI...
-
01722 数値が無効です
-
独自 TYPE 定義した表への IMPORT
-
PL/SQLでPLS-00201のエラー
-
ORA-06502のエラー
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ORA-01013のエラーについて経験...
-
CASE文のエラーについて
-
PL/SQLのコンパイルエラーにつ...
-
PL/SQL PLS-00103エラーについて
-
ORA-06502のエラー
-
シェルスクリプトでオラクルの...
-
PCC-S-02201エラーの対処を教え...
-
はじめまして!
-
ORA-01843: 指定した月が無効で...
-
SQLLOADER
-
PL/SQLによるCREATE TABLE後のI...
-
「ORA-00907: 右カッコがありま...
-
DATABSE LINKについて
-
無効なSQL文の具体例を教えてく...
-
【PL/SQL】SQL文が長すぎてSELE...
-
ストアドファンクションの実行
-
データベースのカラムの型がCHA...
-
sqlのエラーハンドリングについ...
-
HAVING句でのBETWEEN演算子
-
ACCESSでパススルークエリにパ...
おすすめ情報