powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / odcitabledescribe problems
6 сообщений из 6, страница 1 из 1
odcitabledescribe problems
    #39630182
a.l.e.x.a.n.d.r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
create or replace type sql_t AS OBJECT(
STATIC FUNCTION querydb (stmt IN VARCHAR2) return ANYDATASET pipelined using sql_t,
STATIC FUNCTION odcitabledescribe (rtype OUT ANYTYPE,stmt IN VARCHAR2)RETURN NUMBER,

При вызове select * from sql_t.querydb('select * from dual').

в Describe передается пустая строка что приводит к дальнейшей ошибке. Через пакетную функцию происходит тоже самое

версия БД 12.2.0.1
на одном инстансе работает все корректно, на другом происходит сбой.

Может кто сталкивался. приму любые советы ( переустановить проблемно )
...
Рейтинг: 0 / 0
odcitabledescribe problems
    #39630230
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Функция ODCITableDescribe вызывается только при hard parse, то есть на этапе когда выражения еще не вычислены. Посему все что передается в ODCITableDescribe это парамeтры литералы, а вмeсто парамeтров не-литералов передается NULL. Так-что если в твоем случае на другом инстансе выполняется что-то типа:

Код: plsql
1.
2.
:v_sql := 'select * from dual';
select * from sql_t.querydb(:v_sql);



то работать не будет независимо от версии:


Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
SQL> select  banner
  2    from  v$version
  3  /

BANNER
--------------------------------------------------------------------------------
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
PL/SQL Release 12.2.0.1.0 - Production
CORE    12.2.0.1.0      Production
TNS for 64-bit Windows: Version 12.2.0.1.0 - Production
NLSRTL Version 12.2.0.1.0 - Production

SQL> CREATE OR REPLACE
  2    TYPE  natural_vector_type
  3      AUTHID CURRENT_USER
  4      AS OBJECT(
  5                fetch_more varchar2(1),
  6                tmt        SYS.ANYTYPE,
  7                num_cols   INTEGER,
  8                STATIC FUNCTION ODCITableStart(
  9                                               sctx     IN OUT natural_vector_type,
 10                                               num_cols IN     INTEGER
 11                                              ) RETURN PLS_INTEGER,
 12                STATIC FUNCTION ODCITablePrepare(
 13                                                 sctx     OUT natural_vector_type,
 14                                                 tf_info  IN  SYS.ODCITabFuncInfo,
 15                                                 num_cols IN  INTEGER
 16                                                ) RETURN PLS_INTEGER,
 17                MEMBER FUNCTION ODCITableFetch(
 18                                               self   IN OUT natural_vector_type,
 19                                               nrows  IN     NUMBER,
 20                                               objSet OUT    SYS.ANYDATASET
 21                                              ) RETURN PLS_INTEGER,
 22                MEMBER FUNCTION ODCITableClose(
 23                                               self IN natural_vector_type
 24                                              ) RETURN PLS_INTEGER,
 25                STATIC FUNCTION ODCITableDescribe(
 26                                                  rtype    OUT SYS.ANYTYPE,
 27                                                  num_cols IN  INTEGER
 28                                                 ) RETURN PLS_INTEGER
 29               )
 30  /

Type created.

SQL> CREATE OR REPLACE
  2    TYPE BODY natural_vector_type
  3      IS
  4        STATIC FUNCTION ODCITableStart(
  5                                       sctx     IN OUT natural_vector_type,
  6                                       num_cols IN     INTEGER
  7                                      ) RETURN PLS_INTEGER
  8          IS
  9          BEGIN
 10              RETURN ODCICONST.SUCCESS;
 11        END;
 12        STATIC FUNCTION ODCITablePrepare(
 13                                         sctx     OUT natural_vector_type,
 14                                         tf_info  IN  SYS.ODCITabFuncInfo,
 15                                         num_cols IN  INTEGER
 16                                        ) RETURN PLS_INTEGER
 17          IS    
 18              rtn number ;
 19              prec     PLS_INTEGER;
 20              scale    PLS_INTEGER;
 21              len      PLS_INTEGER;
 22              csid     PLS_INTEGER;
 23              csfrm    PLS_INTEGER;
 24              elem_typ SYS.ANYTYPE;    
 25              aname    VARCHAR2(30) ;
 26          BEGIN
 27              rtn:=tf_info.RetType.GetAttreleminfo(
 28                                                   1,
 29                                                   prec,
 30                                                   scale,
 31                                                   len,
 32                                                   csid,
 33                                                   csfrm,
 34                                                   elem_typ,
 35                                                   aname
 36                                                  );
 37              sctx:= natural_vector_type('Y',elem_typ,num_cols);
 38              RETURN ODCICONST.SUCCESS;    
 39        END;
 40        MEMBER FUNCTION ODCITableFetch(
 41                                       self   IN OUT natural_vector_type,
 42                                       nrows  IN     NUMBER,
 43                                       objSet OUT    SYS.ANYDATASET
 44                                     ) RETURN PLS_INTEGER
 45          IS
 46              elem_typ SYS.ANYTYPE;
 47          BEGIN
 48              SYS.ANYDATASET.BeginCreate(
 49                                         SYS.DBMS_TYPES.TYPECODE_OBJECT,
 50                                         tmt,
 51                                         objSet
 52                                        );
 53              IF fetch_more = 'Y'
 54                THEN
 55                  fetch_more := 'N';
 56                  objSet.Addinstance;          
 57                  objSet.PieceWise;
 58                  FOR i IN 1..self.num_cols LOOP  
 59                    objSet.SetNumber(
 60                                     i,
 61                                     CASE
 62                                       WHEN i = self.num_cols
 63                                         THEN
 64                                           TRUE
 65                                         ELSE
 66                                           FALSE
 67                                     END
 68                                    );              
 69                  END LOOP;           
 70                  objSet.Endcreate;            
 71                ELSE
 72                  objSet:=null;
 73              END IF;
 74              RETURN ODCICONST.SUCCESS;
 75        END;
 76        MEMBER FUNCTION ODCITableClose(
 77                                       self IN natural_vector_type
 78                                      ) RETURN PLS_INTEGER
 79          IS
 80          BEGIN
 81              RETURN ODCICONST.SUCCESS;
 82        END;
 83        STATIC FUNCTION ODCITableDescribe(
 84                                          rtype    OUT SYS.ANYTYPE,
 85                                          num_cols IN  INTEGER
 86                                         ) RETURN PLS_INTEGER
 87          IS
 88              mt SYS.ANYTYPE;
 89              tmt SYS.ANYTYPE;
 90          BEGIN
 91              SYS.ANYTYPE.BeginCreate(
 92                                      SYS.DBMS_TYPES.TYPECODE_OBJECT,
 93                                      mt
 94                                     );    
 95              FOR i IN 1..num_cols LOOP
 96                mt.AddAttr(
 97                           'C' || i,
 98                           SYS.DBMS_TYPES.TYPECODE_NUMBER,
 99                           NULL,
100                           NULL,
101                           NULL,
102                           NULL,
103                           NULL
104                          );
105              END LOOP;  
106              mt.EndCreate;
107              SYS.ANYTYPE.BeginCreate(
108                                      SYS.DBMS_TYPES.TYPECODE_NAMEDCOLLECTION,
109                                      tmt
110                                     );    
111              tmt.SetInfo(
112                          NULL,
113                          NULL,
114                          NULL,
115                          NULL,
116                          NULL,
117                          mt,
118                          DBMS_TYPES.TYPECODE_OBJECT,
119                          0
120                         );
121              tmt.EndCreate;
122              rtype:=tmt;
123              RETURN ODCICONST.SUCCESS;
124        END;
125  END;
126  /

Type body created.

SQL> CREATE OR REPLACE
  2    FUNCTION natural_vector(num_cols INTEGER) RETURN ANYDATASET
  3      PIPELINED
  4        USING natural_vector_type;
  5  /

Function created.

SQL> SELECT  *
  2    FROM  TABLE(
  3                natural_vector(5)
  4               )
  5  /

        C1         C2         C3         C4         C5
---------- ---------- ---------- ---------- ----------
         1          2          3          4          5

SQL> VARIABLE n NUMBER
SQL> exec :n := 5;

PL/SQL procedure successfully completed.

SQL> SELECT  *
  2    FROM  TABLE(
  3                natural_vector(:n)
  4               )
  5  /
SELECT  *
*
ERROR at line 1:
ORA-06502: PL/SQL: numeric or value error
ORA-06512: at "SCOTT.NATURAL_VECTOR_TYPE", line 104
ORA-06512: at line 4


SQL> 




SY.
...
Рейтинг: 0 / 0
odcitabledescribe problems
    #39630249
a.l.e.x.a.n.d.r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Речь не идет про передачу значения переменной.

выполняется именно как


Код: plsql
1.
select * from sql_t.querydb('select * from dual')
...
Рейтинг: 0 / 0
odcitabledescribe problems
    #39630272
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажи код ф-ции и её вызов с кодом ошибки.

SY.
...
Рейтинг: 0 / 0
odcitabledescribe problems
    #39630371
a.l.e.x.a.n.d.r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался.

админы сменили cursor_sharing. все это работает только если параметр выставлен как

Код: plsql
1.
alter system set cursor_sharing=exact scope = both;



SIMILAR или FORCE приводят к ошибке
...
Рейтинг: 0 / 0
odcitabledescribe problems
    #39630425
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a.l.e.x.a.n.d.rРазобрался.

админы сменили cursor_sharing. все это работает только если параметр выставлен как

Код: plsql
1.
alter system set cursor_sharing=exact scope = both;



SIMILAR или FORCE приводят к ошибке

SIMILAR/FORCE преобразуют литералы в bind variable, в результате, как и говорилось "все что передается в ODCITableDescribe это парамeтры литералы, а вмeсто парамeтров не-литералов передается NULL".

SY.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / odcitabledescribe problems
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]