游标中的动态表名称

时间:2015-07-02 11:07:47

标签: oracle plsql oracle11g

我正在尝试插入其架构是动态的数据,因为在用户输入架构名称时。出于某种原因,我得到 if(tempMaxDate != null && tempMinDate != null) { xScale.domain()[0] = tempMinDate; xScale.domain()[1] = tempMaxDate; } ,即使表格在正确的架构中。

以下是代码:

ORA-000942: table doesn't exist

知道我犯了什么错误吗? 提前干杯:)

2 个答案:

答案 0 :(得分:0)

user很可能没有privilege访问其他架构中的表格。

您需要授予SELECT权限。

GRANT SELECT ON table_name TO username;

将所需的table_nameusername放入正在执行 SELECT 的用户。

答案 1 :(得分:0)

通过互联网进行一些研究和漫步之后,这就是我发现的。看来我需要以稍微不同的方式声明模式和表名变量。为何此解决方案有效?不知道。

declare
  l_schema_name all_tables.owner%type := '&1';
  l_ext_files_names varchar2(4000) := '&2';
  l_table_name all_tables.table_name%type := 'FILES_TBL';
  l_int_files_names varchar2(4000);
  c_file_name sys_refcursor; 

begin
  open c_file_name for 'select file_names from '||l_schema_name||'.'||l_table_name;
  fetch c_file_name into l_int_files_names;
  if c_file_name%notfound then
     execute immediate 'insert into '||l_schema_name||'.'||l_table_name||' (file_names, entry, status) values ('''||l_ext_files_names||''', sysdate, ''done'')';
     commit;
  elsif (l_int_files_names <> l_ext_files_names) then
     execute immediate 'insert into '||l_schema_name||'.'||l_table_name||' (file_names, entry, status) values ('''||l_ext_files_names||''', sysdate, ''done'')';
     commit;
  else 
     dbms_output.put_line ('Already there.');
  end if;
exception when others then
  dbms_output.put_line ('Some errors.');
end;
/