2016-05-14 34 views
0

私はテーブルからすべての行とフィールドを返したいと思います。テーブル名とフィールド名はあらかじめわかっていません。以下のような何か:有望と思われる Oracle SQL Select文で動的にテーブルに名前を付ける方法は?

EXECUTE IMMEDIATE

https://stackoverflow.com/a/101064/209942 「...種類が知られていない項目の行にアクセスしようとする試みを」この他の方法が有望に見えるが、 select * from test_cursorが与える

select * from [TABLENAME]

、しかし、私複数の行を返すにはカーソルが必要だと読んで、私は例を見つけることができません。

非常に簡単で高速な解決策が望ましい(つまり、行ごとの処理を避けたい)。

機能や手順の作成を避けたいですが、避けられないこともあります。たぶん私はテーブル関数を使用する必要がありますか?

多分次のようなものでしょうか?あなたの条件の

CREATE OR REPLACE FUNCTION GetTable(table_name CHAR) 

BEGIN 

EXECUTE IMMEDIATE 'CREATE TABLE temp_table 
    AS (SELECT * FROM :1)' USING table_name; 

END; 

SELECT * FROM table (temp_table) 

THX

+0

チェックパッケージ[:手順(誰か、私の構文を訂正)として、

DROP TABLE TEMP_TABLE; DECLARE table_name VARCHAR2(200); BEGIN table_name := 'subreports'; EXECUTE IMMEDIATE 'CREATE TABLE temp_table AS (SELECT * FROM ' ||table_name||')'; END; SELECT * FROM temp_table; 

または:

EXECUTE IMMEDIATE 'CREATE TABLE temp_table AS (SELECT * FROM ' ||table_name||')'; SELECT * FROM temp_table; 

長い答えはDBMS_SQL](https://docs.oracle.com/database/121/ARPLS/d_sql.htm#ARPLS058)では、完全な動的SQL文を実行できます。 –

答えて

0

最も難しい部分は、データ型あなたが取得したい列の一貫性、選択したい各テーブル名の間で異なる場合があります列の数です。あなたの質問のために

、あなたが使用できます。

  1. を動的SQLとGlobal Temporary Table:fieldname1とfieldname2は常にあなたのglobal_tempのデータ型の一致col1とcol2のを持っている場合にのみ、(あなたが最初global_tempテーブルを作成する必要があります)。

    delete global_temp; 
    sql_stmt := 'insert into global_temp(col1,col2) 
          SELECT '|| fieldname1 || ',' || fieldname2 
          ||' FROM ' || var_table_name; 
    EXECUTE IMMEDIATE sql_stmt; 
    select * from global_temp; --do any thing with result temp table 
    
  2. dynamic SQL into records(ループ各行を結果を得るために):検索emp_rec

-1

、リンクに行くこの回答は、フィールドの種類や数のいずれかの知識を必要としません。

短い答えは:

create procedure GetTable (table_name in VARCHAR2(200), result_set out sys_refcursor) 
    is 
    begin 
    DROP TABLE TEMP_TABLE PURGE; 
    EXECUTE IMMEDIATE 'CREATE TABLE temp_table AS (SELECT * FROM ' ||table_name||')'; 
     open result_set for select * from temp_table; 
    end; 
関連する問題