字符从JAVA执行SQL语句时出现问题
我在oracle数据库的表中存储了以下字符串:字符从JAVA执行SQL语句时出现问题,java,oracle,hibernate,plsql,special-characters,Java,Oracle,Hibernate,Plsql,Special Characters,我在oracle数据库的表中存储了以下字符串: CREATE OR replace PROCEDURE P_algorithm_ptcrb_2 ( s_result IN OUT VARCHAR2, i_config IN NUMBER, i_user IN NUMBER, s_name IN VARCHAR2, i_general_features IN NUMBER, i_pic
CREATE OR replace PROCEDURE P_algorithm_ptcrb_2 (
s_result IN OUT VARCHAR2,
i_config IN NUMBER,
i_user IN NUMBER,
s_name IN VARCHAR2,
i_general_features IN NUMBER,
i_pic IN NUMBER)
AS
s_aviso VARCHAR2(2000);
/*TYPE array_varchar2 IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER;*/
l_categories pkg_ptcrb.array_varchar2;
l_bands pkg_ptcrb.array_varchar64;
l_test_requirements VARCHAR2(256);
l_technologies VARCHAR2(256);
i_test_plan_generation NUMBER;
i_error_pic NUMBER;
BEGIN /* Hora de inicio */
SELECT 'Start_ '
|| To_char(SYSDATE, 'HH24_MI_SS')
INTO s_aviso
FROM dual;
dbms_output.Put_line(s_aviso); /* ********************* */
/* STEP 0_ New test plan */ /*
********************* */
s_aviso := '0.- New test plan.';
EXCEPTION
WHEN OTHERS THEN
Raise_application_error(-20001, 'An error was encountered - '
||SQLCODE
||' -ERROR- '
||SQLERRM);
END p_algorithm_ptcrb_2;
我需要从java应用程序中执行这句话,以便在oracle中动态创建存储过程
我正在使用hibernate,在执行句子之前,我将字符“:”替换为“\:”,现在我有了以下代码:
CREATE OR replace PROCEDURE P_algorithm_ptcrb_2 ( s_result IN OUT VARCHAR2,
i_config IN NUMBER,
i_user IN NUMBER,
s_name IN VARCHAR2,
i_general_features IN NUMBER,
i_pic IN NUMBER ) AS s_aviso VARCHAR2(2000);
/*TYPE array_varchar2 IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER;*/
l_categories pkg_ptcrb.array_varchar2;
l_bands pkg_ptcrb.array_varchar64;
l_test_requirements VARCHAR2(256);
l_technologies VARCHAR2(256);
i_test_plan_generation NUMBER;
i_error_pic NUMBER;
BEGIN
/* Hora de inicio */
SELECT 'Start_ '
|| To_char(SYSDATE, 'HH24_MI_SS')
INTO s_aviso
FROM dual;
dbms_output.Put_line(s_aviso);
/* ********************* */
/* STEP 0_ New test plan */
/*
********************* */
s_aviso \\:= '0.- New test plan.';
EXCEPTION
WHEN OTHERS THEN
Raise_application_error(-20001,'An error was encountered - '
||SQLCODE
||' -ERROR- '
||SQLERRM);
END p_algorithm_ptcrb_2;
代码中唯一的区别是字符“:”和“\:”
现在我执行java代码:
Query q= session.createSQLQuery("create or replace PROCEDURE P_ALGORITHM_PTCRB_2 ( s_result in out VARCHAR2, i_config in NUMBER, i_user in NUMBER, s_name in VARCHAR2, i_general_features in NUMBER, i_pic in NUMBER ) AS s_aviso VARCHAR2(2000); /*TYPE array_varchar2 IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER;*/ l_categories PKG_PTCRB.array_varchar2; l_bands PKG_PTCRB.array_varchar64; l_test_requirements VARCHAR2(256); l_technologies VARCHAR2(256); i_test_plan_generation NUMBER; i_error_pic NUMBER; BEGIN /* Hora de inicio */ select 'Start_ '|| to_char(sysdate, 'HH24_MI_SS') into s_aviso from dual; dbms_output.put_line(s_aviso); /* ********************* */ /* STEP 0_ New test plan */ /* ********************* */ s_aviso \\:= '0.- New test plan.'; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END P_ALGORITHM_PTCRB_2;");
String aux="create or replace PROCEDURE P_ALGORITHM_PTCRB_2 ( s_result in out VARCHAR2, i_config in NUMBER, i_user in NUMBER, s_name in VARCHAR2, i_general_features in NUMBER, i_pic in NUMBER ) AS s_aviso VARCHAR2(2000); /*TYPE array_varchar2 IS TABLE OF VARCHAR2(2) INDEX BY BINARY_INTEGER;*/ l_categories PKG_PTCRB.array_varchar2; l_bands PKG_PTCRB.array_varchar64; l_test_requirements VARCHAR2(256); l_technologies VARCHAR2(256); i_test_plan_generation NUMBER; i_error_pic NUMBER; BEGIN /* Hora de inicio */ select 'Start_ '|| to_char(sysdate, 'HH24_MI_SS') into s_aviso from dual; dbms_output.put_line(s_aviso); /* ********************* */ /* STEP 0_ New test plan */ /* ********************* */ s_aviso \\:= '0.- New test plan.'; EXCEPTION WHEN OTHERS THEN raise_application_error(-20001,'An error was encountered - '||SQLCODE||' -ERROR- '||SQLERRM); END P_ALGORITHM_PTCRB_2;";
new String(aux).equals(sourceCode); // <--false
boolean isEquals=aux == sourceCode; // <--false
log.debug(aux);
log.debug(sourceCode);
q= session.createSQLQuery(aux);
q=session.createSQLQuery(sourceCode);
q.executeUpdate();
但是如果我直接执行的句子有效,为什么??我认为这可能是一些隐藏字符,因为如果我使用“==”进行比较,结果是错误的,但我没有看到这些字符
Thx:)从错误中可以看出:导致了一个问题,尽管它用\转义
您使用的是什么版本的hibernate?看看这是否是您的问题尝试将“s_-aviso:='0.-新测试计划';”替换为“选择'0.-新测试计划。.”从dual中插入s_-aviso;“我正在使用Hibernate 4.2.7。问题不在于s_aviso变量。我在过程中有更多的“:=”可以用这种方式替换。我使用的是Hibernate 4.2.7。如果我从datase中读取文本,它就不起作用,但是如果我复制并粘贴文本并将其直接放入java代码中,它就起作用了。两个文本都有字符“\\:=”q=session.createSQLQuery(源代码);会话。createSQLQuery(源代码);-这里只使用1'\'
org.hibernate.QueryException: Space is not allowed after parameter prefix ':'