2017-07-11 3 views
-1

J'ai une table nommée a avec la colonne x.comment créer un type d'enregistrement en utilisant SQL dynamique dans Oracle?

create table A (x varchar2(4000)); 

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

Maintenant, je veux créer un type d'enregistrement dynamiquement sur la base de sql ci-dessus à savoir

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

S'il vous plaît laissez-moi savoir comment créer ci-dessus sur l'exécution enregistrement.

Si ce n'est pas possible, s'il vous plaît suggérer des solutions.

Merci.

+0

S'il vous plaît modifier votre message pour inclure au moins un ci tion aux "forums". Voir [this] (https://meta.stackexchange.com/questions/61071/adding-links-to-comments) pour plus de détails sur la façon de créer des liens dans les publications. – jeff6times7

+0

@ jeff6times7 C'était des forums aléatoires, j'ai fermé ces pages plus tôt et j'ai raté ces URL. – Aamir

+0

Pouvez-vous poster un pseudo code pour montrer ce que vous essayez d'accomplir. – XING

Répondre

0

si vous voulez juste utiliser un enregistrement de cette table dans votre code que vous n'avez pas besoin de créer un type, vous pouvez déclarer une variable rowtype comme ci-dessous

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

Il est possible que la requête ait également une jointure avec une autre table et ait une colonne supplémentaire dans select. Dans ce cas, cela ne fonctionnera pas. C'est pourquoi j'ai demandé dynamiquement. – Aamir

+0

S'il utilisera une requête avec jointures je vous suggérerais d'utiliser le curseur, –

0

Comme vous avez parlé d'une réponse précédente , je suppose que, avec « dinamically » vous voulez créer la base d'une requête qui peut contenir des jointures,

vous pouvez utiliser le curseur comme ci-dessous

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

merci. Mais cela ne marchera pas non plus dans mon cas. Actuellement, j'utilise le package DBMS_SQL pour le trier. Je suis sur le point de le finir. Une fois cela fait, je l'afficherai ici, comment je l'ai fait. – Aamir