Динамический запрос и связзанная переменная

ALIS_MN
Дата: 26.05.2006 15:34:42
Помогите разобраться... пожааааааалустаааааа
Оракл говорит "Выражения должны иметь тип SQL".


create or replace package ttt is
type Txt is table of varchar2(32767) index by binary_integer;
end;

declare
xq varchar2 (1000):='Select year, month from my_table';
xSql varchar2(4000);
xText ttt.txt;
begin
xText(:xText.Count+1):='Начало';

xSql:= 'declare '||
' r number(10); '||

' procedure p(pLine varchar2) is'||
' begin '||
' :xText(:xText.Count+1) := pLine; '||
' end; '||

' begin '||
' p( '' <table>'');' ||
' for xRow in ('||xQ||') loop '||
'--..............' ||
' null; end loop; '||
' p( '' </table>'');' ||
' end;' ;
execute immediate xsql using in out xText;
xText(:xText.Count+1):='Конец';

end;
Калина
Дата: 26.05.2006 15:40:08
А че это Вы вообще делаете?
------------------------------
Not affilated with VAZ
Калина
Дата: 26.05.2006 15:41:35
in out xText;
наверное на это ругается? Ибо так нельзя делать
------------------------------
Not affilated with VAZ
ALIS_MN
Дата: 26.05.2006 15:44:47
Калина
in out xText;
наверное на это ругается? Ибо так нельзя делать
------------------------------
Not affilated with VAZ


Да именно здесь. А как можно ?
dmidek
Дата: 26.05.2006 15:45:12
2 вопроса (возможно они связаны)
1. Что Вы хотите получить ?
2. Зачем Вам динамический SQL ?
ALIS_MN
Дата: 26.05.2006 15:53:14
dmidek
2 вопроса (возможно они связаны)
1. Что Вы хотите получить ?
2. Зачем Вам динамический SQL ?


Я хочу получить некий текст, середина которого заполнена при помощи динамического SQL. Именно при помощи него, поскольку текст запроса xSql и выводимые поля могут меняться.
iV@n
Дата: 26.05.2006 16:01:22
ALIS_MN
dmidek
2 вопроса (возможно они связаны)
1. Что Вы хотите получить ?
2. Зачем Вам динамический SQL ?


Я хочу получить некий текст, середина которого заполнена при помощи динамического SQL. Именно при помощи него, поскольку текст запроса xSql и выводимые поля могут меняться.

может стоить создать sql-тип?
create or replace type Txt is table of varchar2(32767) index by binary_integer; 
ALIS_MN
Дата: 26.05.2006 16:04:16
iV@n
может стоить создать sql-тип?
create or replace type Txt is table of varchar2(32767) index by binary_integer; 

А что это меняет?
dmidek
Дата: 26.05.2006 16:04:19
Очень грубый пример, но от него ИМХО можно танцевать дальше

DECLARE
TYPE typ_text IS table of VARCHAR2(32767);
tab_text typ_text;
BEGIN
EXECUTE IMMEDIATE ' SELECT text FROM
                   (SELECT 2 ord, ename||empno text FROM scott.emp
                   UNION ALL
                   SELECT 0 ord, ''BEGIN'' text FROM DUAL
                   UNION ALL
                   SELECT 1 ord, ''P'' text FROM DUAL
                   UNION ALL
                   SELECT 3 ord, ''/P'' text FROM DUAL
                   UNION ALL
                   SELECT 4 ord, ''END'' text FROM DUAL)
                   ORDER BY ord'  
BULK COLLECT INTO tab_text;
FOR I IN 1..tab_text.count
LOOP
    dbms_output.put_line(tab_text(I));                                     
END LOOP;
END;    


BEGIN
P
SMITH7369
ALLEN7499
WARDDDD7521
JONES7566
MARTIN7654
BLAKE7698
CLARK7782
SCOTT7788
KING7839
TURNER7844
ADAMS7876
JAMES7900
FORD7902
MILLER7934
/P
END
ALIS_MN
Дата: 26.05.2006 16:11:23
dmidek
Очень грубый пример, но от него ИМХО можно танцевать дальше

[src oracle]DECLARE
TYPE typ_text IS table of VARCHAR2(32767);
tab_text typ_text;
BEGIN
EXECUTE IMMEDIATE ' SELECT text FROM
(SELECT 2 ord, ename||empno text FROM scott.emp
UNION ALL
........
BULK COLLECT INTO tab_text;






конечно это нормальный select

а у меня то PL/SQL блок !!! :-/\/\/\