zoukankan      html  css  js  c++  java
  • 关于SOA或JAVA调用存储过程,执行了存储过程没有执行里面游标的问题

    昨天遇到一个问题,在系统迁移的时候,原来用SOA封装的接口,到正式环境遇到了存储过程执行了,但是游标里的数据没有insert到相应表的问题.

    但是本地执行存储过程测试的时候是合适的.

    怀疑可能是EBS里面的视图做了语言关联.

    使用sql查看一下当前存储过程的语言:

    select userenv('LANG') from dual;

    结果看到

    本地测试返回结果是 CHS

    SOA返回结果是EN

    于是查看游标的查询sql

    发现CST_INV_DISTRIBUTION_V这个视图下面的视图有vl的视图

    于是做一次验证

    果然是这个问题:

    在存储过程中加入:

      execute immediate 'ALTER SESSION SET NLS_LANGUAGE="SIMPLIFIED CHINESE"';

    注意这个放在begin 和end之间,

    ---可能需要注意下面的地方:

    ORACLE BEGIN END 关键字表示一个完整的块。

    在任何一个ORACLE 的PL/SQL块中至少需要一个BEGIN..END来表示这是一个完整的块。这些PL/SQL块包括DECLARE开头的自定义虚拟块,存储过程,函数,包等.
    begin ...end的意义可以理解为SQL语句执行的上下限,begin 是上限,SQL开始的地方,end是下限sql语句结束的地方.

    另外,执行一个procedure 可以使用运行下面语句

    begin

    procedure_name();

    end; 来执行。

    BEGIN END 和EXECUTE区别

    begin end;是匿名块 是在 PL-SQL环境中运行的,execute是命令 可以被外界调用。

    execute 是调用oracle的系统包,过程或函数等,在执行时就是以begin..end开始和结束的。

    Oracle的pl/sql块都至少有一个begin...end来表示完整块,在begin...end中可以自定义一些函数,存储过程和包等,

    这些自定义码由begin开始执行,其所对应的end结束。

    请看下面例子:

    Oracle中执行一个dbms_job包,以下四个写法:
    begin
    dbms_job.run(44);
    end; ----这样正常运行

    dbms_job.run(44); ----这样会报错

    begin
    execute dbms_job.run(44);
    end; ----这样会报错

    execute dbms_job.run(44); ----这样正常运行

  • 相关阅读:
    母版页中对控件ID的处理
    使用Gridview绑定数据库中的图片
    导出Excel表格时,如何把数据库表中的编号转换成配置文件中的"汉字"
    ORA01502: 索引'P_ABCD.PK_WEB_BASE'或这类索引的分区处于不可用状态
    Oracle 把触发器说透
    规模估算失准 软件开发成空中楼阁
    在web开发中的三个层次使用事务
    oninput,onpropertychange,onchange的用法和区别
    Oracle 把游标说透
    在datatable中,在指定位置插入列
  • 原文地址:https://www.cnblogs.com/hopedba/p/10975093.html
Copyright © 2011-2022 走看看