-1
Declare
TYPE cur_type IS REF CURSOR;
v_owner varchar2(40);
v_table_name varchar2(40);
v_column_name varchar2(100);
ln_col_variable VARCHAR2(20000) := Null;
sql_fetch VARCHAR2(30000) := Null;
l_xmltype XMLTYPE;
col_var varchar2(2000);
enquiry_cur cur_type;
/* First cursor */
CURSOR get_tables IS
SELECT DISTINCT tbl.table_name
FROM user_tab_columns tbl
WHERE tbl.column_name='ENQUIRY_NO';
/* Second cursor */
CURSOR get_columns IS
SELECT DISTINCT col.column_name
FROM user_tab_columns col
-- WHERE col.owner = v_owner
WHERE col.table_name = v_table_name;
BEGIN
dbms_output.enable(1000000);
-- Open first cursor
OPEN get_tables;
LOOP
FETCH get_tables INTO v_table_name;
exit when get_tables%notfound;
DBMS_OUTPUT.PUT_LINE(v_table_name);
dbms_output.put_line('----------------------');
-- Open second cursor
OPEN get_columns;
LOOP
FETCH get_columns INTO v_column_name;
exit when get_columns%notfound;
dbms_output.put_line(v_column_name);
ln_col_variable :=ln_col_variable||','||v_column_name;
col_var:=replace(substr(ln_col_variable,1,1),',','*');
--dbms_output.put_line(col_var);
/* Loop
ln_col_variable :=ln_col_variable||','||v_column_name;
End Loop;*/
-- ln_col_variable :=ln_col_variable||sysdate;
-- sql_fetch := 'Select '||ln_col_variable||' From '||v_table_name;
-- dbms_output.put_line(sql_fetch);
END LOOP;
sql_fetch := 'Select '||col_var||' From '||v_table_name;
OPEN enquiry_cur FOR sql_fetch ;
l_xmltype := XMLTYPE(enquiry_cur);
dbms_output.put_line(l_xmltype.getClobVal);
CLOSE get_columns;
END LOOP;
CLOSE get_tables;
EXCEPTION
WHEN OTHERS THEN raise_application_error(-20001,'An encountered '||SQLCODE||' -ERROR- '||SQLERRM);
end ;
74行目でPlsqlの数値または値のエラーが発生しました。 sql_fetch文字列のxml出力を取得したいutl_filesを使用しましたが、xml出力を取得できませんでした。テーブルは動的にしか認識されません。テーブル構造もコンパイル時に知られています以下のコードでPLSQL数値または値エラーが発生する
私は.IN上の宣言セクションカーソルget_columnsをコードをチェックしてきたように私の2番目のカーソルがパラメータ化されていないが、USER_TAB_COLUMNS COL は異なるcol.column_name を選択 IS - WHERE col.owner = v_owner WHERE col.table_name = v_table_name; 私はパラメータ化されたカーソルを使用していません – Alka
以下の実行可能なセクションでコードOPEN get_columnsです。 ループ \t FETCH get_columns INTO v_column_name; \t終了時にget_columns%notfound; \t dbms_output.put_line(v_column_name); – Alka
@Alka。私はパラメータ化されたcusorが何であるかを理解する必要があると思います。どのようにしてoracleがこの 'WHERE col.table_name = v_table_name;'から 'v_table_name'の値を理解しなければなりませんか?投稿したコードを読んでください。そのうまく動作します。ちょうど私が述べたことに従います。 – XING