一个过程带参数,传过来的参数是查询表名的一部分,我不知道变量和字符串怎么接合
解决方案 »
- 如何把record table里的数据放到object table里
- oracle数据库异地备份,在不同主机上建立物理备用数据库
- 如何将dat文件中的数据写入PL/SQL中,急
- 【求助】【急】关于Oracle10g里的Order by速度慢的问题
- 奇怪的表,有关Oracle table数据的问题,请教各位达人.
- oracle form的button的名字很长,怎么换行
- 多个结构相同的表如何统一排序?
- 如果一个表只有两个字段,但是两个字段都是外键行吗?(在oracle中建表时遇到的问题)
- 已知是該年第n周,怎麼得到該周的周一是哪天?
- 这个问题应该不是很难!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
- 忘记oracle 9i密码
- oracle function 中的空值判断问题
declare
v_sql varchar2(200);
v_table_name varchar2(20) :='test';
begin
v_sql:='select * from '||v_table_name||'';
execute immediate v_sql;
dbms_output.put_line(v_sql);
end;
v_sql varchar2(200);
v_table_name varchar2(20) :='test';
begin
v_sql:='select * from '||v_table_name||'';
execute immediate v_sql;
dbms_output.put_line(v_sql);
end;
----------
1
2
3
4SQL> create or replace procedure test
2 (pi_tbname IN varchar2)
3 IS
4 c_tbname CONSTANT VARCHAR2(30) :='test_';
5 v_tbname VARCHAR2(30);
6 v_sqlstr VARCHAR2(100);
7 v_id test_2001.id%TYPE;
8 begin
9 v_tbname := c_tbname||pi_tbname;
10 v_sqlstr :='SELECT id from '||v_tbname||' where rownum=1';
11 EXECUTE IMMEDIATE v_sqlstr INTO v_id;
12 dbms_output.put_line(v_id);
13 end test;
14 /过程已创建。SQL> set serveroutput on
SQL> exec test('2001');
1
execute immediate v_sql;
动态sql执行用 execute immediate
如果是select,直接定义一个v_sql varchar2(1000);
然后open 游标 for v_sql即可