我编写了一个程序,其中SQL查询&查询ID保存在表格中。用户将选择查询ID,程序将生成其输出到指定的UNIX目录。
现在我在从表中获取查询后,将查询保存在包体的全局变量中
我担心的是,当多个用户同时运行程序时,我的全局变量(存储SQL查询)会相应更新吗?
例如:
create or replace package test
is
global_sql varchar2(40000);
procedure get_sql(p_sql_id number)
is
begin
select sql into global_sql from query_table where sql_id = p_sql_id;
//more code
end;
end;
现在,当多个用户同时为不同的sql_id运行此程序时,我的global_sql会因此对所有用户有所不同吗?
答案 0 :(得分:3)
我想你的意思是包变量? 在这种情况下,任何不同连接中的任何用户都将在他自己的变量副本中获得自己的值。所有这些值将保留在UGA(用户全局区域)中。
例如,我创建没有body的包来保存一个变量:
connect test/test
create or replace package test_var is
v_sql_text varchar2(4000);
end test_var;
/
exec test_var.v_sql_text := 'FIRST_QUERY:select * from dual';
打开另一个会话
connect test/test
set serveroutput on
exec dbms_output.put_line( test_var.v_sql_text);
/*result is empty*/
exec test_var.v_sql_text := 'TEXT_QUERY:select * from all_tables';
exec dbms_output.put_line( test_var.v_sql_text);
--
TEXT_QUERY:select * from all_tables
返回第一个会话
exec dbms_output.put_line( test_var.v_sql_text);
--
FIRST_QUERY:select * from dual