Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 предварительный просмотр declare begin end  [new]
MsSqlToOracle
Guest
в sql developer' наваял конструкцию
DECLARE
l_t VARCHAR(250);
BEGIN
L_T := '25'; 
SELECT T1.f1, T1.F2, L_T  as f3
FROM 
           (
            SELECT 1 AS F1, 'A' AS F2 FROM DUAL 
            UNION ALL
            SELECT 2, 'B' FROM DUAL
           ) t1;
 end;
при её выполнении пишет:
Error report:
ORA-06550: Строка 5, столбец 1:
PLS-00428: в этом предложении SELECT ожидается фраза INTO
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:
Как посмотреть результат выполнения?

если же выполнить
SELECT T1.f1, T1.F2, '25' as f3
FROM 
           (
            SELECT 1 AS F1, 'A' AS F2 FROM DUAL 
            UNION ALL
            SELECT 2, 'B' FROM DUAL
           ) t1;


То нормальный селект возвращается, т.е. отображает в виде таблицы.

Может надо команды нужны дополнительные?
31 окт 11, 14:43    [11526842]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
По PL/SQL книжки или доку читал?
Ведь по русски сказано в этом предложении SELECT ожидается фраза INTO

Сообщение было отредактировано: 31 окт 11, 14:47
31 окт 11, 14:46    [11526861]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
__vvp_
Member

Откуда: Санкт-Петербург
Сообщений: 1158
MsSqlToOracle,

Читай про sys_refcursor
31 окт 11, 14:52    [11526900]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
MsSqlToOracle
Guest
tru55,
усугублю
DECLARE
L_T VARCHAR(250);
L_CUR SYS_REFCURSOR;
BEGIN
L_T := '25'; 

open L_CUR for
SELECT T1.f1, T1.F2, L_T as f3
FROM 
           (
            SELECT 1 AS F1, 'A' AS F2 FROM DUAL 
            UNION ALL
            SELECT 2, 'B' FROM DUAL
           ) t1;
 end;
можно ли вывести, что в курсоре.
31 окт 11, 14:55    [11526933]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
AmKad
Member

Откуда:
Сообщений: 5222
MsSqlToOracle
можно ли вывести, что в курсоре.

Все-таки вывести, или передать результат запроса на клиента? Если первое, то dbms_output, если второе, то хватит селекта.
31 окт 11, 14:58    [11526958]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
tru55
Member

Откуда: СПб
Сообщений: 19790
MsSqlToOracle
можно ли вывести, что в курсоре.

Если на экран, то простейший способ - dbms_output
31 окт 11, 14:58    [11526964]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
_Nikotin
Member

Откуда: СПб
Сообщений: 2965
MsSqlToOracle,

var l_cur refcursor

DECLARE
  L_T VARCHAR(250);  
BEGIN
  L_T := '25'; 
  open :l_cur for
    SELECT T1.f1, T1.F2, L_T as f3
    FROM 
    (
      SELECT 1 AS F1, 'A' AS F2 FROM DUAL 
      UNION ALL
      SELECT 2, 'B' FROM DUAL
    ) t1;
END;
/

print l_cur
31 окт 11, 15:07    [11527044]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
MsSqlToOracle
Guest
tru55,
Вообще интересна методология отладки, с предварительными результатами на экран.
Например:
Необходимо какие-то данные загнать в хмл, потом хмл куда передать и там парсануть.
Если делать по шагам:
Вначале хмл:
WITH ABB AS (
        SELECT CAST(5 AS NUMERIC(19,0)) AS F1
                ,CAST(8 AS NUMERIC(19,0)) AS f2
        FROM DUAL
        UNION
              SELECT CAST(6 AS NUMERIC(19,0)) AS F1
                ,CAST(7 AS NUMERIC(19,0)) AS f2
        FROM DUAL
        )

 SELECT  XMLELEMENT("root",XMLAGG(
                  XMLELEMENT("b",XMLELEMENT("F1",E.F1)
                        ,XMLELEMENT("f2",E.f2) 
                     )
                     )
              ) as r
  FROM ABB E ;


Если надо выполнить, то видно что получилось.
Потом результат загнать в хмл:
SET SERVEROUTPUT ON
DECLARE 
L_XML XMLTYPE;
begin
WITH ABB AS (
        SELECT CAST(5 AS NUMERIC(19,0)) AS F1
                ,CAST(8 AS NUMERIC(19,0)) AS f2
        FROM DUAL
        UNION
              SELECT CAST(6 AS NUMERIC(19,0)) AS F1
                ,CAST(7 AS NUMERIC(19,0)) AS f2
        FROM DUAL
        )

 SELECT  XMLELEMENT("root",XMLAGG(
                  XMLELEMENT("b",XMLELEMENT("F1",E.F1)
                        ,XMLELEMENT("f2",E.f2) 
                     )
                     )
              )
 into l_xml
 FROM ABB E ;
  end;


теперь бы надо посмотреть что в переменной, например так
SELECT D.EXTRACT(('b/F1/text()')).GETSTRINGVAL()  AS INFRADOCID
      ,d.extract(('b/F2/text()')).getStringVal()  as ParentInfraDocId
 FROM TABLE(XMLSEQUENCE(L_XML.EXTRACT('root/b'))) D;
Вопрос в том как это объеденить?
31 окт 11, 15:14    [11527120]     Ответить | Цитировать Сообщить модератору
 Re: предварительный просмотр declare begin end  [new]
MsSqlToOracle
Guest
2_Nikotin,

спасибо
31 окт 11, 15:39    [11527400]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить