oracle 建表语句外面执行正常,放到存储过程执行不出来 10
EXECUTEIMMEDIATE'CREATETABLETMP_BASE_CALL_1ASSELECTAREA_ID,(CASEWHENLENGTH(CALLING_NB...
EXECUTE IMMEDIATE 'CREATE TABLE TMP_BASE_CALL_1 AS
SELECT AREA_ID,
(CASE WHEN LENGTH(CALLING_NBR)=7 OR LENGTH(CALLING_NBR)=8 OR LENGTH(CALLING_NBR)=11 THEN CALLING_AREA_CODE ELSE func_update_tel_area(CALLING_AREA_CODE,CALLING_NBR,''0'') END) CALLING_AREA_CODE,
(CASE WHEN LENGTH(CALLING_NBR)=7 OR LENGTH(CALLING_NBR)=8 OR LENGTH(CALLING_NBR)=11 THEN CALLING_NBR ELSE func_update_tel_area(LTRIM(CALLING_AREA_CODE,''0''),CALLING_NBR,''1'') END) CALLING_NBR,
(CASE WHEN LENGTH(CALLED_NBR)=7 OR LENGTH(CALLED_NBR)=8 OR LENGTH(CALLED_NBR)=11 THEN CALLED_AREA_CODE ELSE func_update_tel_area(CALLED_AREA_CODE,CALLED_NBR,''0'') END) CALLED_AREA_CODE,
(CASE WHEN LENGTH(CALLED_NBR)=7 OR LENGTH(CALLED_NBR)=8 OR LENGTH(CALLED_NBR)=11 THEN CALLED_NBR ELSE func_update_tel_area(LTRIM(CALLED_AREA_CODE,''0''),CALLED_NBR,''1'') END) CALLED_NBR,
START_TIME,
DURATION,
CALLING_CSDN,
CALLED_CSDN,
CALL_TYPE,
SERVICE_DATE
FROM BASE_CALL
WHERE AREA_ID = '''||V_LAN||'''
AND SERVICE_DATE = '''||V_SERV_DATE||'''';
为什么把建表语句后面这些拿出来外面执行就没有问题,很快就出来,但是如果把这些放存储过程中执行就出不来了,高手帮忙看下,谢谢
可是我就是单独拿出来执行没有问题呀,很奇怪,请高手再帮忙看下,谢谢!
我也试过了把这语句放在V_SQL的变量中,再执行EXECUTE IMMEDIATE V_SQL,可是还是一样的慢,或者执行不过去,不知道为什么? 展开
SELECT AREA_ID,
(CASE WHEN LENGTH(CALLING_NBR)=7 OR LENGTH(CALLING_NBR)=8 OR LENGTH(CALLING_NBR)=11 THEN CALLING_AREA_CODE ELSE func_update_tel_area(CALLING_AREA_CODE,CALLING_NBR,''0'') END) CALLING_AREA_CODE,
(CASE WHEN LENGTH(CALLING_NBR)=7 OR LENGTH(CALLING_NBR)=8 OR LENGTH(CALLING_NBR)=11 THEN CALLING_NBR ELSE func_update_tel_area(LTRIM(CALLING_AREA_CODE,''0''),CALLING_NBR,''1'') END) CALLING_NBR,
(CASE WHEN LENGTH(CALLED_NBR)=7 OR LENGTH(CALLED_NBR)=8 OR LENGTH(CALLED_NBR)=11 THEN CALLED_AREA_CODE ELSE func_update_tel_area(CALLED_AREA_CODE,CALLED_NBR,''0'') END) CALLED_AREA_CODE,
(CASE WHEN LENGTH(CALLED_NBR)=7 OR LENGTH(CALLED_NBR)=8 OR LENGTH(CALLED_NBR)=11 THEN CALLED_NBR ELSE func_update_tel_area(LTRIM(CALLED_AREA_CODE,''0''),CALLED_NBR,''1'') END) CALLED_NBR,
START_TIME,
DURATION,
CALLING_CSDN,
CALLED_CSDN,
CALL_TYPE,
SERVICE_DATE
FROM BASE_CALL
WHERE AREA_ID = '''||V_LAN||'''
AND SERVICE_DATE = '''||V_SERV_DATE||'''';
为什么把建表语句后面这些拿出来外面执行就没有问题,很快就出来,但是如果把这些放存储过程中执行就出不来了,高手帮忙看下,谢谢
可是我就是单独拿出来执行没有问题呀,很奇怪,请高手再帮忙看下,谢谢!
我也试过了把这语句放在V_SQL的变量中,再执行EXECUTE IMMEDIATE V_SQL,可是还是一样的慢,或者执行不过去,不知道为什么? 展开
展开全部
如果存储过程不复杂可以直接在代码里做。比如创建表,插入数据,读取数据,在dao中批量执行就OK了。
不知道你是不是想输出存储过程里面执行的语句,验证存储过程正确性或者存储过程中执行语句的速度。如果是java程序获取存储过程的语句,在存储过程中定义一个变量用来存放需要执行的语句,执行这条语句用EXECUTE IMMEDIATE。例如定义变量
v_sql := 'insert into test(test_col) values(1)';
执行语句
execute IMMEDIATE v_sql;
提交
commit;
然后把需要输出的语句放入临时表。
如果需要在java程序中输出则直接读取这张表相应记录就可以了。
不知道你是不是想输出存储过程里面执行的语句,验证存储过程正确性或者存储过程中执行语句的速度。如果是java程序获取存储过程的语句,在存储过程中定义一个变量用来存放需要执行的语句,执行这条语句用EXECUTE IMMEDIATE。例如定义变量
v_sql := 'insert into test(test_col) values(1)';
执行语句
execute IMMEDIATE v_sql;
提交
commit;
然后把需要输出的语句放入临时表。
如果需要在java程序中输出则直接读取这张表相应记录就可以了。
展开全部
语句太长了,中间有一段引号之类的东西 ,可能就出现问题了
你加个字符串变量 v_sql保存一下建表语句,然后执行这条语句吧
单步执行,看一下这个变量的值,拷贝出来执行以下你就知道错误在哪里了
你加个字符串变量 v_sql保存一下建表语句,然后执行这条语句吧
单步执行,看一下这个变量的值,拷贝出来执行以下你就知道错误在哪里了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
没有错误代码么?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询