有34个表,每个表的表名格式为aa***bb ,其中***是六位数字,从别的表中可以查到。
现在想写个存储过程,目的就是想从这34个表中分别查询出来其中的两个字段的值,然后插入到别的表中。
å 建ç«ç»æ表ï¼ä¹å°±æ¯åæ¾ä½ æç»ç»æç表
create table testç¶å建ç«åå¨è¿ç¨
create procedure p_insert
ææç»æ²¡æµè¯ï¼ä½ èªå·±æµè¯ä¸ä¸ï¼çåªæé®é¢å§
追é®æä»å«ç表ä¸æ¥è¯¢å°***å¨åªå¿æ§è¡çï¼ æä¹ç»è£ æä¸ä¸ªæ°è¡¨åçå¢ï¼
追çä½ ä»
user_tables éæ¥ä¸å°ä½ çé£äºè¡¨ååï¼
ä½ æè¿å¥åç¬è¿è¡ä¸ä¸
select 'insert into test select col1,col2 from '||table_nameuser_tables ä¸åçä¸æ¯è¡¨åãuser_tablesä¸çcodeå段åçåªæ¯è¡¨åä¸é´çä¸é¨åãè¿34个表åæ¯æ¼èµ·æ¥ç æ ¼å¼æ¯ aacodebb ã
追çæç»ä½ åä½ æ¥æ¶ä¸ä¸ï¼æµè§å¨å³ä¸è§
执行34次查询,查询出来34组数据
追答可是你所有表里面的字段名称都是一样的吗?
追问是的。这34个表就名称不一样,表结构都一样。
追答你用union关键字吧,
先select 'select col1,col2 from '||table_name||' union '
from user_tables where table_name like 'AA____BB';这样会得到34个结果,然后那最后一个结果的union 关键字去掉就得到了你要的结果了,然后你想把结果放到表里面还不简单啊?
oracle存储过程中查询动态表名
create table test(a varchar2(100),b varchar2(100));然后建立存储过程 create procedure p_insertascursor cur_tbname is select 'insert into test select col1,col2 from '||table_name from user_tables where table_name like 'AA___BB';--这个位置的表名必须大写的A和B,col1和col2...
oracle动态表名查询 如何写sql语句或者存储过程实现: 根据某张表中的某...
begin for cur in(select id,flag fromu a)loop if cur.flag=0 then select * from b;...else select * from C;...end if;end loop;end;
oracle存储过程如何动态修改表名关联查询
用动态sql拼接语句就好了!VSQL varchar2(2000)day varchar2(2);begin day:= to_char(sysdate-1,'dd');VSQL:=' selectsum(sms.send_count) into sa_send_cnt from core_school sc inner join sms_mt_send sms on sc.school_id = sms.school_id inner join sms_mt_send_det...
如何在oracle存储过程中执行动态sql语句
时需要在oracle 存储过程中执行动态SQL 语句 ,例如表名是动态的,或字段是动态的,或查询命令是动态的,可用下面的方法:set serveroutput ondeclaren number;sql_stmt varchar2(50);t varchar2(20);beginexecute immediate 'alter session set nls_date_format=''YYYYMMDD''';t := 't_' || sy...
Oracle存储过程中如何把表名写在变量里面进行查询该表?
create or replace procedure p_XX(tabName in varchar2) is type t_cursor is ref cursor;v_cursor t_cursor;v_SQLStatement varchar2(300);begin v_SQLStatement = 'select xx from '||tabName ;open v_cursor for v_SQLStatement;loop fetch v_cursor into XXX;exit when v_cur...
oracle 怎么在存储过程中查询数据
oracle数据库中,已建立好的存储过程信息存储在系统表ALL_SOURCE 中,需要用sysdba身份登录数据库,进行查询操作,SQL命令如下:1 2 3 4 5 SELECT line,text FROM ALL_SOURCE WHERE TYPE='PROCEDURE'AND NAME='过程名称'AND OWNER='用户名'ORDER BY line;存储过程分成多行,每一行会存储为一条数据...
oracle PL\/sql 如果一张表的每行数据是另一个表的列名 怎么用存储过 ...
oracle动态游标举例:-- i_address 是存储过程的输入参数,o_cur是存储过程的输出游标参数,用以获取返回的结果集!CREATE OR REPLACE PROCEDURE xue_userinfo_proc(i_address VARCHAR2, o_cur OUT SYS_REFCURSOR)IS sqlstr VARCHAR2(200); -- 定义变量,用以存放SQL语句 BEGIN sqlstr := 'SELECT ...
oracle的存储过程里面怎样引用表的名称?
在Oracle中这样写是不行的,在存储过程中所有查询返回的结果或结果集都必须有接受变量,如果你的存储过程是返回一个记录集,必须定一个ref的游标变量,使用open cursor for select。。。这样的格式才能返回数据集
如何使用oracle存储过程查询某张表的所有信息
先定义一个系统游标(sys_refcursor),然后将返回的记录集放到这个游标中。例如:CREATE OR REPLACE procedure test (ret out sys_refcursor)as begin open ret for select col_name from table;end test;
oracle 怎么查找哪一个包中使用了一个表(表我是知道哪一个的)_百度知...
drop和create是不可能在包里处理的。你就查select、 update 和 delete,之后跟的就是表名,这个是查包里用了多少个表,都是哪些表。如果反过来查,一个表被多少个包,存贮过程等使用了,那就更简单了,用Toad for Oracle,在编辑器里打上表名后F4,点那个used by就OK了。