我有个Oracle存储过程,使用了时间参数,用的是date,貌似不好使,然后使用了string,在存储过程里面转成date,但是执行结果不正确,麻烦大牛给看看啥问题。
create or replace procedure MY_TEST_1(P_TABLE_CALC IN VARCHAR2,
P_TABLE_RESULT IN VARCHAR2,
P_APPKEY IN VARCHAR2,
P_CALC_DEC IN VARCHAR2,
P_CALC_DATE IN VARCHAR2) IS
V_SQL VARCHAR2(500);
V_DATE VARCHAR2(30);
BEGIN
V_DATE := to_date(P_CALC_DATE,'yyyy-mm-dd HH24:MI:SS');
V_SQL := ' INSERT INTO ' || P_TABLE_CALC || ' (CTIME,
APPKEY,
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
RESULT_CNT,
RESULT_DEC)
SELECT ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || ''',
''' || P_APPKEY || ''',
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
NVL(SUM(AMOUNT), 0),''' || P_CALC_DEC || ''' FROM ' ||
P_TABLE_RESULT || ' T
WHERE T.CTIME >= ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || '''
GROUP BY T.GAMECHANNEL, T.GAMEVERSION, T.GAMEREALM';
EXECUTE IMMEDIATE 'COMMIT';
DBMS_OUTPUT.put_line('The result is ' || V_SQL);
DBMS_OUTPUT.put_line('The date is ' || V_DATE);
COMMIT;
END MY_TEST_1;在执行的过程中看了输出,日期格式是:‘16-9月 -13’这样的,同样的语句我不用存储过程,直接赋值执行就没有问题,这个是执行输出:
The result is INSERT INTO mbi_Test_calc_tmp (CTIME,
APPKEY,
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
RESULT_CNT,
RESULT_DEC)
SELECT '16-9月 -13',
'dddd',
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
NVL(SUM(AMOUNT), 0),'fffff' FROM mbi_test_role_recharge T
WHERE T.CTIME >= '16-9月 -13'
GROUP BY T.GAMECHANNEL, T.GAMEVERSION, T.GAMEREALM
The date is 16-9月 -13麻烦大牛看下,谢谢了。
create or replace procedure MY_TEST_1(P_TABLE_CALC IN VARCHAR2,
P_TABLE_RESULT IN VARCHAR2,
P_APPKEY IN VARCHAR2,
P_CALC_DEC IN VARCHAR2,
P_CALC_DATE IN VARCHAR2) IS
V_SQL VARCHAR2(500);
V_DATE VARCHAR2(30);
BEGIN
V_DATE := to_date(P_CALC_DATE,'yyyy-mm-dd HH24:MI:SS');
V_SQL := ' INSERT INTO ' || P_TABLE_CALC || ' (CTIME,
APPKEY,
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
RESULT_CNT,
RESULT_DEC)
SELECT ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || ''',
''' || P_APPKEY || ''',
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
NVL(SUM(AMOUNT), 0),''' || P_CALC_DEC || ''' FROM ' ||
P_TABLE_RESULT || ' T
WHERE T.CTIME >= ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || '''
GROUP BY T.GAMECHANNEL, T.GAMEVERSION, T.GAMEREALM';
EXECUTE IMMEDIATE 'COMMIT';
DBMS_OUTPUT.put_line('The result is ' || V_SQL);
DBMS_OUTPUT.put_line('The date is ' || V_DATE);
COMMIT;
END MY_TEST_1;在执行的过程中看了输出,日期格式是:‘16-9月 -13’这样的,同样的语句我不用存储过程,直接赋值执行就没有问题,这个是执行输出:
The result is INSERT INTO mbi_Test_calc_tmp (CTIME,
APPKEY,
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
RESULT_CNT,
RESULT_DEC)
SELECT '16-9月 -13',
'dddd',
GAMECHANNEL,
GAMEREALM,
GAMEVERSION,
NVL(SUM(AMOUNT), 0),'fffff' FROM mbi_test_role_recharge T
WHERE T.CTIME >= '16-9月 -13'
GROUP BY T.GAMECHANNEL, T.GAMEVERSION, T.GAMEREALM
The date is 16-9月 -13麻烦大牛看下,谢谢了。
解决方案 »
- 求一sql语句
- 每隔0.5秒从服务器数据库的TabA表中提数据刷新客户端界面上的MSHFlexGrid1控件。有24个客户端,TabA表中的记录由于各个客户端的操作而频繁变动,变动的范围为0~2000条左右记录,请审查这个方案是否可行。见主要代码:
- 错误信息(923:ORA-00923: 未找到要求的 FROM 关键字
- oracle错误 12154 无法处理服务名
- 求一个sql语句,需要高效率,两个海量数据表
- ORACLE服务不能启动的问题
- 怎么没有create or replace table
- Oracle9i在RedHat Linux9下的安装问题,在线等待!
- 如何完全卸载oracle8i!
- 求助,为什么我连最基本的查询都是并行模式的
- 请教一个函数或者过程中的表名带入的问题。
- sql语句查询
/declare
v_sql varchar2(200);
v_date varchar2(10):='20130102';
begin
v_sql:= 'insert into t values(to_date('''||v_date||''',''yyyymmdd''))';
dbms_output.put_line(v_sql);
execute immediate v_sql;
commit;
end;
V_DATE := to_date(P_CALC_DATE,'yyyy-mm-dd HH24:MI:SS');
SELECT ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || ''', 改为
SELECT P_CALC_DATE,
如果是date类型:
SELECT ''' || to_date( P_CALC_DATE ,'yyyy-mm-dd HH24:MI:SS') || ''', 改为
SELECT V_DATE,
execute immediate 'alter session set nls_date_format=''dd-Mon-yy''';或许也可以。
啥 7 字节啊
啥 7 字节啊
http://blog.oracle.com.cn/html/07/t-110907.html
这个是查询的时候看到的,说是产生这个问题的原因