例如你指定写入的表为t_table_column表,过程传入参数为表用户,表名
创新互联是专业的溆浦网站建设公司,溆浦接单;提供网站建设、成都网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行溆浦网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!
create or replace procedure p_check_table(owner in varchar2,
table_name in varchar2) as
v_owner varchar2(100) := null;
v_table varchar2(200) := null;
v_table_num number(10) := null;
v_column clob := null;
begin
v_owner := upper(owner);
v_table := upper(table_name);
select count(1)
into v_table_num
from all_tables t
where t.OWNER = v_owner
and t.TABLE_NAME = v_table;
if v_table_num = 0 then
dbms_output.put_line(v_owner || '.' || v_table || ':表不存在');
return;
end if;
v_column := null;
for i in (select t.COLUMN_NAME, t.COLUMN_ID
from all_tab_columns t
where t.OWNER = v_owner
and t.TABLE_NAME = v_table
order by COLUMN_ID) loop
v_column := v_column || ',' || i.column_name;
end loop;
insert into t_table_column
(owner, table_name, column_name)
values
(v_owner, v_table, v_column);
commit;
exception
when others then
rollback;
dbms_output.put_line(v_owner || '.' || v_table || '异常' || sqlerrm);
end p_check_table;
/
使用plsql存储过程制造一个脚本如:
create or replace procedure test_val
(etl_date varchar2, --时间或者数字变量
data out sys_refcursor ---存放数据
) as
s_sql varchar2(1000); --执行sql
begin
s_sql := 'SELECT A,B FROM tsalpludetail' || etl_date ;
--dbms_output.put_line(s_sql);----打印sql可以不需要
open data for s_sql; ---把结果集放入data
end test_val;
执行后,打开存储过程
最后查看数据
至此完成
1、临时表
WITH CTE AS (
SELECT T1.Sno,T1.Cno, T.Cname,T.Cpno,T.Ccredit,T.Grade
FROM Course T
INNER JOIN SC T1 ON T.Cno =T1.Cno
) SELECT * FROM
2、创建表
CREATE TABLE AA AS
SELECT T1.Sno,T1.Cno, T.Cname,T.Cpno,T.Ccredit,T.Grade
FROM Course T
INNER JOIN SC T1 ON T.Cno =T1.Cno
create proc selectName
as
begin
declare @sql varchar(100)
declare @name varchar(20)
select @name = name from sysobjects where xtype='U' and id=373576369
print @name
set @sql='select * from '+ @name --拼接
exec (@sql)
end
exec selectName --执行
仅供参考!
动态SQL 实质就是执行的SQL字符串,所以你完全可以用拼接的方式,先把 字符串 拼接出来,然后用execute immediate 'sql' 来执行;
至于如果拼接出来 SQL,那就需要你去找规律,其实你可以对字符串做对此拼接,例如一下:str1 :='SELECT QW,QE,QR FROM Q WHERE Q=1';
str2 :='SELECT QW,COUNT(1) FROM EW,' || str1 || 'WHERE EW=QW GROUP BY QW;'
这类问题 完全属于个别案例,因为SQL的规律只有你自己最清楚,谁都无法提供一个完整的解决方案!
办法是有的,就是特别麻烦,需要又重循环,第一重,循环所有表,第二重,循环特定表中的字段,然后将所有满足条件的表名和字段名插入到一张新的表中,然后再自己分析结果,确认究竟是哪个表哪个字段, 仅提供思想而已,需要息写一个procedure 或者function实现。