2017-07-11 188 views
-1

我有一個名爲a的列,列x。如何在oracle中使用動態sql創建記錄類型?

create table A (x varchar2(4000)); 

insert into A values ('select p,q,r from o'); 
commit; 

現在我想上面的SQL即

TYPE rc IS RECORD (p o.p%type, 
        q o.q%type, 
        r o.r%type); 

請讓我知道如何創建上方運行記錄的基礎上,動態地創建一個記錄類型。

如果不可能,請提出任何解決辦法。

謝謝。

+0

請修改您的帖子,包括至少一個詞到「論壇」。有關如何在帖子中創建鏈接的更多詳細信息,請參見[this](https://meta.stackexchange.com/questions/61071/adding-links-to-comments)。 – jeff6times7

+0

@ jeff6times7這是隨機的論壇,我已經關閉了這些頁面,並錯過了這些網址。 – Aamir

+0

您可以發佈一個僞代碼來演示您試圖實現的內容。 – XING

回答

0

,如果你只是想用這個表在代碼的記錄,你並不需要創建一個類型,你可以聲明一個變量行類型爲波紋管

CREATE TABLE xx_emp (emp_id NUMBER, emp_name VARCHAR2(100)); 

DECLARE 

    l_emp_type xx_emp%ROWTYPE; 

BEGIN 

    l_emp_type.emp_id := 10; 
    l_emp_type.emp_name := 'JOE'; 

END; 
+0

查詢也可能與另一個表有聯繫,並且在select中有額外的列。在這種情況下,它將不起作用。這就是爲什麼我要求動態。 – Aamir

+0

如果它將使用連接查詢,我會建議您使用遊標, –

0

當你談到前面的回答,我將承擔所有以「dinamically」你要根據可能包含聯接查詢來創建它,

你可以使用光標作爲波紋管

DECLARE 
    -- here you declare a cursor named c_cursor_name 
    CURSOR c_cursor_name IS SELECT a.emp_name 
           , b.dept_name 
          FROM xx_emp a 
           , xx_Dept b 
          WHERE a.dept_id = b.dept_id; 

    -- here you can declare your record based on your cursor 
    r_recors_type c_cursor_name%ROWTYPE; 

BEGIN 

    -- now you can fill your cursor as you want 
    r_recors_type.emp_name := 'JOE'; 
    r_recors_type.dept_name := 'Marketing'; 


END; 
+0

謝謝。但這對我來說也不起作用。目前我正在使用DBMS_SQL包對此進行分類。我即將完成它。一旦完成後會在這裏發佈,我是如何做到這一點的。 – Aamir

相關問題