使用来自java的值执行匿名pl/sql块文件

使用来自java的值执行匿名pl/sql块文件,java,sql,oracle,plsql,Java,Sql,Oracle,Plsql,我在一个sql文件中有一个匿名pl/sql块,我想在Java中执行它并给它赋值。我的sql块如下所示 DECLARE someInput1 NUMBER(1); someInput2 NUMBER(2); someString1 VARCHAR(100); BEGIN someInput1 := ‘&1’; someInput2 := ‘&a

我在一个sql文件中有一个匿名pl/sql块,我想在Java中执行它并给它赋值。我的sql块如下所示

    DECLARE

            someInput1 NUMBER(1);

            someInput2 NUMBER(2);

            someString1 VARCHAR(100);

    BEGIN

            someInput1 := ‘&1’;

            someInput2 := ‘&2’;

            --get name in table A

            BEGIN

                    SELECT a.value INTO someString1

                    FROM TABLE_A a

                    WHERE a.id = someInput1;               

            END;



            UPDATE TABLE_B b

            SET b.someStringRow = someString1

            WHERE b.someIntRow = someInput2;

            COMMIT;

    END;

    /

    exit;
我计划做的是以Java字符串加载sql文件,将“&1”更改为?1,并将其作为CallableStatement执行。然而,我越来越

    PLS-00103: Encountered the symbol “” when expecting one of the following
    begin function package pragma procedure subtype us <an identifier> <a double quoted delimited identifier> form current cursor
DECLARE节中的行出现错误

我的方法是可接受的解决方案吗?如果是,我的方法可能有什么错误


我的问题还有其他更好的解决办法吗?谢谢

您必须删除引号,并将&1替换为:1,您应该很好,而且您还需要删除“/”并退出;它们与sqlplus相关,而不是直接与pl/sql相关

删除&1和&2周围的引号。定义缺少的SomeString1您实际上不需要局部变量,您可以直接引用绑定变量。你真的是说?1,而不仅仅是?对于两个替换变量?它不喜欢尾随/或出口;,尽管应该这样说——您的真实代码是否有卷曲引号,或者在创建问题时是否引入了这些引号?但是,为什么这是一个PL/SQL块,或者两个DML语句呢?我将用替换(&a)?所以我可以使用callableStatement.setInt1、javaInt。。。等等pl块有更多的语句,我只是不能键入它,因为我正在使用电话。另外,当我删除&1上的引号时,我会得到无效的列索引异常,就像ravinder一样suggested@FrankSmith-你不需要给电话号码吗?但是占位符;命令中的第一个将使用setInt1,…,进行设置,因为它们是位置的,没有命名。看起来您已经删除了替换变量周围的引号。您遗漏的其余错误可能会有所帮助,但我怀疑是/和退出;它不满意。我尝试将所有的&number改为?和移除/并退出;我忘了提到我仍然在使用JDK1.5,尽管我不知道它有什么影响