複雑に考えすぎかもしれませんが、下記としてみました。
text
1DECLARE
2 v_rows INT;
3 v_cur_hdl1 INT;
4 v_cur_hdl2 INT;
5 v_stmt1 VARCHAR2(4000);
6 v_stmt2 VARCHAR2(4000);
7
8 v_tabname VARCHAR2(200);
9 v_colname VARCHAR2(200);
10 v_comment VARCHAR2(200);
11 v_value NUMBER;
12BEGIN
13 v_stmt1 := '
14SELECT
15 COL.TABLE_NAME,
16 COL.COLUMN_NAME,
17 COM.COMMENTS
18FROM
19 USER_TAB_COLUMNS COL
20LEFT JOIN
21 USER_TAB_COMMENTS COM
22 ON COL.TABLE_NAME = COM.TABLE_NAME
23 AND COL.COLUMN_NAME = COL.COLUMN_NAME
24WHERE
25 COL.COLUMN_NAME = :colname
26 AND COL.TABLE_NAME LIKE :tabname
27ORDER BY 1,2
28';
29
30 v_cur_hdl1 := DBMS_SQL.OPEN_CURSOR;
31 DBMS_SQL.PARSE(v_cur_hdl1, v_stmt1, DBMS_SQL.NATIVE);
32 DBMS_SQL.BIND_VARIABLE(v_cur_hdl1, 'colname', 'KOUSHINKAISU');
33 DBMS_SQL.BIND_VARIABLE(v_cur_hdl1, 'tabname', 'M_%');
34 DBMS_SQL.DEFINE_COLUMN(v_cur_hdl1, 1, v_tabname, 200);
35 DBMS_SQL.DEFINE_COLUMN(v_cur_hdl1, 2, v_colname, 200);
36 DBMS_SQL.DEFINE_COLUMN(v_cur_hdl1, 3, v_comment, 200);
37
38 v_rows := DBMS_SQL.EXECUTE (v_cur_hdl1);
39 LOOP
40 IF DBMS_SQL.FETCH_ROWS(v_cur_hdl1) > 0 THEN
41 DBMS_SQL.COLUMN_VALUE(v_cur_hdl1, 1, v_tabname);
42 DBMS_SQL.COLUMN_VALUE(v_cur_hdl1, 2, v_colname);
43 DBMS_SQL.COLUMN_VALUE(v_cur_hdl1, 3, v_comment);
44
45 v_stmt2 := 'SELECT ' || v_colname || ' FROM ' || v_tabname || ' WHERE 999 <= ' || v_colname;
46 v_cur_hdl2 := DBMS_SQL.OPEN_CURSOR;
47 DBMS_SQL.PARSE(v_cur_hdl2, v_stmt2, DBMS_SQL.NATIVE);
48 DBMS_SQL.DEFINE_COLUMN(v_cur_hdl2, 1, v_value);
49
50 v_rows := DBMS_SQL.EXECUTE(v_cur_hdl2);
51 LOOP
52 IF DBMS_SQL.FETCH_ROWS(v_cur_hdl2) > 0 THEN
53 DBMS_SQL.COLUMN_VALUE(v_cur_hdl2, 1, v_value);
54 DBMS_OUTPUT.PUT_LINE(v_tabname);
55 EXIT;
56 ELSE
57 EXIT;
58 END IF;
59 END LOOP;
60 DBMS_SQL.CLOSE_CURSOR(v_cur_hdl2);
61 ELSE
62 EXIT;
63 END IF;
64 END LOOP;
65 DBMS_SQL.CLOSE_CURSOR(v_cur_hdl1);
66END;
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2017/11/20 04:32