ORA-00900:无效SQL语句错误?我的SQL有什么问题?

ORA-00900:无效SQL语句错误?我的SQL有什么问题?,sql,oracle,oracle11g,db-solo,Sql,Oracle,Oracle11g,Db Solo,我试图编写一个拆分字符串的函数,但它显示:ORA-00900:invalid SQL statement error;或v_strs_last varchar24000:=p_值;可能是错的 CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000); create or replace function strsplit(p_value varchar2, p

我试图编写一个拆分字符串的函数,但它显示:ORA-00900:invalid SQL statement error;或v_strs_last varchar24000:=p_值;可能是错的

CREATE OR REPLACE TYPE strsplit_type IS TABLE OF VARCHAR2 (4000);

create or replace function strsplit(p_value varchar2,
                                p_split varchar2 := ',') 
return strsplit_type
pipelined is
v_idx    integer;
v_str  varchar2(500);
v_strs_last varchar2(4000) := p_value; 
begin
  loop
    v_idx := instr(v_strs_last, p_split);
    exit when v_idx = 0;
    v_str       := substr(v_strs_last, 1, v_idx - 1);
    v_strs_last := substr(v_strs_last, v_idx + 1);
    pipe row(v_str);
   end loop;
pipe row(v_strs_last);
return; 
end strsplit;

我的oracle版本是OracleDatabase11gEnterpriseEdition 11.2.0.3.0-64位生产版。我在DBSolo5中运行脚本。 错误图片为:
您的DB Solo客户端似乎在解释它视为语句结尾的第一个分号,这对于普通SQL DML或DDL是合理的,但对于PL/SQL则不合理

你可以从你发布的日志图像中看到这一点;它处理创建函数。。。v_将整数部分标识为一个语句,因为它以第一个分号结尾-它会编译,但会出错。然后它将下一个块,直到下一个分号,作为一个单独的语句-v_str varchar25000-它将获取ORA-00900,因为它不是有效的SQL

:

语句必须用分号或“GO”关键字分隔。您可以将设置更改为仅使用分号或“GO”作为语句分隔符,而不是接受任何一个的默认设置。当查询编辑器中有多条语句时,DB Solo将一次向服务器发送一条语句

基于此,它似乎不理解如何区别对待PL/SQL;但是您可以更改设置,不将分号视为语句分隔符,这意味着您需要在create type和create function语句以及任何其他查询或调用之后添加GO。这类似于在SQL*Plus或SQL Developer中使用/everywhere

它可能更容易使用。大概是在您从中创建了类型和函数之后


当然,也可以使用不同的客户机…

您的DB Solo客户机似乎在解释它视为语句结尾的第一个分号,这对于普通SQL DML或DDL是合理的,但对于PL/SQL则不合理

你可以从你发布的日志图像中看到这一点;它处理创建函数。。。v_将整数部分标识为一个语句,因为它以第一个分号结尾-它会编译,但会出错。然后它将下一个块,直到下一个分号,作为一个单独的语句-v_str varchar25000-它将获取ORA-00900,因为它不是有效的SQL

:

语句必须用分号或“GO”关键字分隔。您可以将设置更改为仅使用分号或“GO”作为语句分隔符,而不是接受任何一个的默认设置。当查询编辑器中有多条语句时,DB Solo将一次向服务器发送一条语句

基于此,它似乎不理解如何区别对待PL/SQL;但是您可以更改设置,不将分号视为语句分隔符,这意味着您需要在create type和create function语句以及任何其他查询或调用之后添加GO。这类似于在SQL*Plus或SQL Developer中使用/everywhere

它可能更容易使用。大概是在您从中创建了类型和函数之后


或者,当然,使用不同的客户端…

看起来不错。你运行脚本的方式一定有问题。你用的是什么工具?你到底是如何应用脚本的?@sstan,我把截图上传到网上了,请稍等,这确实是错误的。这在11.1.0.7版本中编译时没有错误。我的oracle版本是oracle Database 11g Enterprise Edition 11.2.0.3.0-64位版本。我在DB SOLO 5中运行脚本。不要使用注释来添加信息,而是编辑问题并将其添加到那里。这次我是为你做的——下次,请记住。谢谢,看起来不错。你运行脚本的方式一定有问题。你用的是什么工具?你到底是如何应用脚本的?@sstan,我把截图上传到网上了,请稍等,这确实是错误的。这在11.1.0.7版本中编译时没有错误。我的oracle版本是oracle Database 11g Enterprise Edition 11.2.0.3.0-64位版本。我在DB SOLO 5中运行脚本。不要使用注释来添加信息,而是编辑问题并将其添加到那里。这次我是为你做的——下次,请记住。谢谢