0

我正在使用 oracle 11g。每当我遇到大于 varchar2 大小限制的字符串时,我都会在 sql server 中将数据拆分为多个变量,如下所示,然后在执行时加入它们。然而,Oracle 似乎在执行前期望 32K 组合大小。我收到“ORA-20000: ORU-10028: line length overflow, limit of 32767 bytes per line”错误。

我在一个口头脚本(不是存储过程)中使用这些变量。最后 2 个语句引发了上述错误,并且我能够单独显示该值。提前致谢。

DECLARE

sViewQuery varchar2(32000);
sViewSelectQuery varchar2(32000);

BEGIN

    ---Assign values of 32,000 letter string (dynamic query)
    sViewSelectQuery:='32K string...';
    sViewQuery:='32K string..';

    DBMS_OUTPUT.PUT_LINE(sViewQuery||sViewSelectQuery);

    EXECUTE IMMEDIATE sViewQuery||sViewSelectQuery;

END;
4

2 回答 2

3

您可以为此使用 DBMS_SQL 包:

DECLARE
stmt DBMS_SQL.VARCHAR2A;
c number;
res number;
BEGIN
stmt(1) := 'create view view_a (';
stmt(2) := 'col_a, ';
stmt(3) := 'col_b, ';
stmt(4) := 'col_c) as '
stmt(5) := 'select ';
stmt(6) := 'col_bb, ';
stmt(7) := 'col_cc + col_ee + DECODE(...), ';
stmt(8) := 'col_dd) ';
stmt(9) := 'from table_b ';
stmt(10) := 'where ... '; 
-- each element can have up to 32K characters, number of elements is (almost) unlimited
c := DBMS_SQL.open_cursor;
DBMS_SQL.parse(c, stmt, 1,10, TRUE, DBMS_SQL.NATIVE);
res := DBMS_SQL.execute(c);
DBMS_SQL.close_cursor(c);
  END;
于 2014-02-11T17:37:34.980 回答
0

您应该使用 CLOB,Character Large OBject。您可以处理 32K+ 的字符串长度,因为 CLOB 最多可以包含 4GB 的数据。

欲了解更多信息:http ://docs.oracle.com/javadb/10.3.3.0/ref/rrefclob.html

于 2014-02-10T22:54:42.893 回答