procedure xxx
begin
A(); // 对表T1进行更新的一个procedure
B(); // 对表T2进行更新的一个procedure
ret = C(); // 通过表T1 T2更新后的状态,返回一个值, C是一个function
end xxx;全程没有commit,在同一个事务里
正式环境是多台服务器, C() 这个函数还是通过T1 T2老的数据状态计算的
开发环境是一台服务器,是通过最新的计算的。函数C 和 T1 T2 没有同一个schema下按道理开发服务器是对的。可能是多台服务器的缘故?希望各位大侠帮忙看看
begin
A(); // 对表T1进行更新的一个procedure
B(); // 对表T2进行更新的一个procedure
ret = C(); // 通过表T1 T2更新后的状态,返回一个值, C是一个function
end xxx;全程没有commit,在同一个事务里
正式环境是多台服务器, C() 这个函数还是通过T1 T2老的数据状态计算的
开发环境是一台服务器,是通过最新的计算的。函数C 和 T1 T2 没有同一个schema下按道理开发服务器是对的。可能是多台服务器的缘故?希望各位大侠帮忙看看
解决方案 »
- Oracle 10g 导出Oracle 11g数据
- 【重要】sysdba权限问题
- 在forms builder中能否看到APP_STANDARD的源代码?
- 怎样生成dml脚本
- 在ORACLEk中返回的结果集中,如果为NULL则为空字符串,怎么做?
- 如何用JDBC从Oracle中获取max_idle_time
- 请教一个递归sql的编写,已经有了但是效率不高,要花8秒多的时间啊
- 关于 library cache pin的疑虑
- oracle连接不上问题
- oracle client配置中的连接属性中的“缺省服务器”和“专用服务器”有什么区别?
- Oracle PL/SQL 一些方便性用法
- oracle函数返回数组类型怎么调用
2.如果是同一个事务,执行完A()和B()之后,虽然没有Commit,但是C()应该读的是T1,T2的新数据了。
除非是T1,T2存在于不同的Scheam下,而且数据不是同步的。
3.这里执行的存储过程XXX,是通过什么应该程序调用的?肯定不是手动执行的吧?
2. t1, t2 在同一个schema下, 函数c在另外一个schema子
3. 其他应用程序调用和在sqlplus中手动调用结果都是一样的。
SQL> create table t(a varchar2(10),b varchar2(10));
Table created
SQL> insert into t values ('1','1');
1 row inserted
SQL> commit;
Commit complete
SQL> create or replace procedure pro_a
2 as
3 begin
4 update t set b='2' where a='1';
5 end;
6 /
Procedure created
SQL> create or replace procedure pro_b
2 as
3 begin
4 update t set b='3' where a='1';
5 end;
6 /
Procedure created
SQL> create or replace function f return varchar2
2 as
3 v_b t.b%type;
4 begin
5 select b into v_b from t where a='1';
6 return v_b;
7 end;
8 /
Function created
SQL> create or replace procedure pro_test
2 as
3 v_b t.b%type;
4 begin
5 pro_a;
6 v_b:= f;
7 dbms_output.put_line('v_b:='||v_b);
8 pro_b;
9 v_b:= f;
10 dbms_output.put_line('v_b:='||v_b);
11 end;
12 /
Procedure created
SQL> set serveroutput on;
SQL> exec pro_test;
v_b:=2
v_b:=3
PL/SQL procedure successfully completed
SQL>
开发一台服务器的时候是没问题,取到的是最新数据。
正式环境三台的话就不对了。我一直怀疑是不是三台服务器没有及时同步?还是function用到了回滚段里的数据?