No.4ベストアンサー
- 回答日時:
#2 の修正版です
-- ---------------------------------------------
-- 動的SQLの作成
-- ---------------------------------------------
C_SQL := DBMS_SQL.OPEN_CURSOR;
v_SQL := 'SELECT 項目1,項目2,項目3 FROM ' || i_TABLE_NM;
-- ---------------------------------------------
-- 動的SQLの解析
-- ---------------------------------------------
DBMS_SQL.PARSE(C_SQL ,v_SQL , DBMS_SQL.NATIVE);
FOR n_CNT IN 1..i_SU LOOP
t_MOJI(n_CNT) := '';
DBMS_SQL.DEFINE_COLUMN(C_SQL,n_CNT,t_MOJI(n_CNT),100);
END LOOP;
-- ---------------------------------------------
-- 動的SQLの実行
-- ---------------------------------------------
Y := DBMS_SQL.EXECUTE(C_SQL);
-- ------------------------------------------
-- フェッチ処理
-- ------------------------------------------
IF DBMS_SQL.FETCH_ROWS(C_SQL) = 0 THEN
EXIT;
END IF;
-- ------------------------------------------
-- 値の取得
-- ------------------------------------------
DBMS_SQL.COLUMN_VALUE(C_SQL ,1 , x); --xに項目1の値が入る
DBMS_SQL.COLUMN_VALUE(C_SQL ,1 , y); --yに項目2の値が入る
DBMS_SQL.COLUMN_VALUE(C_SQL ,1 , z); --zに項目3の値が入る
-------------------------------------------------
こんな感じ?
No.5
- 回答日時:
#3
全然意味違いでした。。。
なのでもうひとつの方法として書き方の簡単な方を
アドバイスさせていただきます。
--------------------------------------------------
/* テストパッケージ定義 */
CREATE OR REPLACE PACKAGE
TEST
IS
PROCEDURE TEST2(t1 in varchar );
END;
/
/* テストパッケージ本体 */
CREATE OR REPLACE PACKAGE BODY
TEST
IS
PROCEDURE TEST2(
t1in varchar
)
IS
N_MAX_VALUE INT; -- 最大値
N_MIN_VALUE INT; -- 最小値
S_SQL varchar(256);
BEGIN
-- 実行するSQL文
S_SQL := 'SELECT MAX(K1), MIN(K1) FROM ' || t1 ;
-- SQL実行と結果取得
EXECUTE IMMEDIATE S_SQL INTO N_MAX_VALUE, N_MIN_VALUE ;
-- とりあえず結果をテストテーブルに格納
INSERT INTO TEST_RESULT(
MAX_VALUE,
MIN_VALUE,
CREATE_DT
)
SELECT N_MAX_VALUE,
N_MIN_VALUE,
SYSDATE
FROM DUAL ;
END TEST2;
END;
/
/* テストプロシージャ実行 */
EXEC TEST.TEST2( 't1' ) ;
/* テスト結果の表示 */
SELECT *
FROM TEST_RESULT ;
--------------------------------------------------
ただSQL解析時のオーバーヘッドが大きいとは聞いてますが、
多用しなければ問題ないと思われます。
No.3
- 回答日時:
始めまして。
miko_zzと申します。
ストアド内で値を取得して使用するのであれば、
下記のテストで確認することは出来ます。
--------------------------------------------------
/* テスト結果テーブル */
CREATE TABLE TEST_RESULT
MAX_VALUE INT,
MIN_VALUE INT,
CREATE_DT DATE ) ;
/* テストパッケージ定義 */
CREATE OR REPLACE PACKAGE
TEST
IS
PROCEDURE TEST;
END;
/
/* テストパッケージ本体 */
CREATE OR REPLACE PACKAGE BODY
TEST
IS
PROCEDURE TEST
IS
N_MAX_VALUE INT; -- 最大値
N_MIN_VALUE INT; -- 最小値
BEGIN
SELECT MAX(K1),MIN(K1)
INTO N_MAX_VALUE,N_MIN_VALUE
FROM T1;
INSER INTO TEST_RESULT(
MAX_VALUE,
MIN_VALUE,
CREATE_DT
)
SELECT N_MAX_VALUE,
N_MIN_VALUE,
SYSDATE
FROM DUAL ;
END TEST;
END;
/
/* テストプロシージャ実行 */
EXEC TEST.TEST ;
/* テスト結果の表示 */
SELECT *
FROM TEST_RESULT ;
--------------------------------------------------
違ってたらごめんなさい。
No.2
- 回答日時:
私は以下の方法で行っています
-- ---------------------------------------------
-- 動的SQLの作成
-- ---------------------------------------------
C_SQL := DBMS_SQL.OPEN_CURSOR;
v_SQL := 'SELECT * FROM ' || i_TABLE_NM;
-- ---------------------------------------------
-- 動的SQLの解析
-- ---------------------------------------------
DBMS_SQL.PARSE(C_SQL ,v_SQL , DBMS_SQL.NATIVE);
FOR n_CNT IN 1..i_SU LOOP
t_MOJI(n_CNT) := '';
DBMS_SQL.DEFINE_COLUMN(C_SQL,n_CNT,t_MOJI(n_CNT),100);
END LOOP;
-- ---------------------------------------------
-- 動的SQLの実行
-- ---------------------------------------------
Y := DBMS_SQL.EXECUTE(C_SQL);
-- ------------------------------------------
-- フェッチ処理
-- ------------------------------------------
IF DBMS_SQL.FETCH_ROWS(C_SQL) = 0 THEN
EXIT;
END IF;
--------------------------------------------
だいたい、こんな感じです
参考になります?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- SQL Server [SQLServer] テーブル名からカラム名を取得する 1 2022/08/23 21:20
- Access(アクセス) access フォーム 大分類、小分類 1 2022/08/11 18:03
- Oracle SQLについて教えて下さい。 主キーを持ったカラムを主キーの機能を持たせたまま カンマ区切りで文字列 1 2023/03/27 22:47
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- PHP PHP MySql ページング 2 2022/09/20 06:38
- Oracle sqlで質問です。 Aテーブルの情報をBテーブルに更新かけたいです。 やりたいことは、Bテーブルの受 1 2023/05/17 11:17
- SQL Server AccessのInsertクエリのあとつづけてDeleteクエリを行いたいがSQLでどう書いたらいい 3 2023/05/27 14:12
- JavaScript html javascriptにてWeb SQLを操作したい。 2 2022/12/16 17:43
- PostgreSQL PostgreSQL レコードからアイテム種類数を取得したい 2 2022/11/23 22:31
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
ストアドプロシジャからストア...
-
PL/SQLについて
-
OracleのTEXT_IOについて
-
INSERT文の書式
-
ストアドプロシージャ結果のフ...
-
パッケージ内のファンクション...
-
ROW_NUMBER()を使用したデータ取得
-
ストアド実行時のエラー「参照...
-
ストアドプロシージャからスト...
-
Accessのマクロでモジュールを...
-
エクセルVBAでUserFormを起動し...
-
Statement ignored というエラー
-
Access VBAで行ラベルが定義さ...
-
SQLで部分的にGROUP BYしたいとき
-
今日の日付が入った行のデータ...
-
14桁の日付(YYYYMMDDHHMMSS)を...
-
百の位での四捨五入について
-
callで順に実行されるプロシー...
-
ODBCリンクの際にACCESSでは読...
-
Accessの数値から時間に変換す...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ストアドプロシジャからストア...
-
時間項目を60進数から10進数へ...
-
ストアド実行時のエラー「参照...
-
PL/SQL exceptionを呼び出すには?
-
ROW_NUMBER()を使用したデータ取得
-
ストアドプロシージャからアナ...
-
質問:DBMS_OUTPUTの使用方法
-
PL/SQLで連結(||)と結合(=>)の違い
-
ストアドプロシージャからスト...
-
パッケージ内のファンクション...
-
PL/SQLのファンクションでのOUT...
-
INSERT文の書式
-
PL/SQL 実行中のSID
-
PL/SQLの例外
-
GET_DDLについて
-
Function内に記述したdbms_outp...
-
Oracle: PACKAGE BODY の分割
-
OracleのTEXT_IOについて
-
動的SQL
-
PL/SQLについて
おすすめ情報