2017-07-11 146 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

相关问题