我正在使用oracle 11g。每当我遇到大于varchar2大小限制的字符串时,在sql server中我用来将数据拆分成多个变量,如下所示,然后在执行时加入它们。但是Oracle在执行之前似乎期待32K的组合大小。我收到“ORA-20000:ORU-10028:行长度溢出,每行限制32767字节”错误。
我在oralce脚本中使用这些变量(不是存储过程)。最后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;
答案 0 :(得分: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;
答案 1 :(得分:0)
您应该使用CLOB,Character Large OBject。您可以处理32K +字符串长度,因为CLOB最多可以包含4GB数据。
了解更多信息:http://docs.oracle.com/javadb/10.3.3.0/ref/rrefclob.html