使用plsql存儲過程制造一個腳本如:
10年積累的網站設計、成都網站建設經驗,可以快速應對客戶對網站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網絡服務。我雖然不認識你,你也不認識我。但先網站制作后付款的網站建設流程,更有全南免費網站建設讓你可以放心的選擇與我們合作。
create or replace procedure test_val
(etl_date? ? varchar2, --時間或者數字變量
data? out sys_refcursor? ---存放數據
) as
s_sql varchar2(1000); --執(zhí)行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;
執(zhí)行后,打開存儲過程
最后查看數據
至此完成
辦法是有的,就是特別麻煩,需要又重循環(huán),第一重,循環(huán)所有表,第二重,循環(huán)特定表中的字段,然后將所有滿足條件的表名和字段名插入到一張新的表中,然后再自己分析結果,確認究竟是哪個表哪個字段, 僅提供思想而已,需要息寫一個procedure 或者function實現。
在后面加點東西,或者在前面加點東西就行了。
比如,tmp_表名_to_char(sysdate,'yyyymmddHH24')
看你多長時間執(zhí)行一次,如果1天,那么就yyyymmdd就好,如果一個小時,那么就hh24,如果怕tmp被用了那么就t_m_p_,反正比較特殊就行。
但是注意別太長啊,我記得oracle的表名有長度限制的,是多少忘記了,dba_tables的table_name字段的長度。
覺得你應該先弄清楚oracle的常規(guī)數據字典的結構,像9i里的常規(guī)數據字典中對象名稱就有以user,all,dba為前綴的對象。
以user為例,我們查該對象下有些什么表,就應該執(zhí)行下列的語句:
sqlselect
table_name
from
user_tables;
類似的,你可以進行替換。:)
如果你想查數據庫中所有的表的話,可以查詢
select
*
from
dba_tables
如果你想查詢數據庫中某個用戶下的表的話,也可以登錄這個用戶,再查詢:
select
*
from
user_tables
要想導入外部sql語句可以用命令
sql
@e:\文件名.sql
如你想保存
select
*
from
tablename;語句的結果,可以在sql*plus
里面這樣:
spool
c:\test.sql
//這是保存文件的位置
select
*
from
tablename;
spool
off
例如你指定寫入的表為t_table_column表,過程傳入參數為表用戶,表名
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;
/
動態(tài)SQL 實質就是執(zhí)行的SQL字符串,所以你完全可以用拼接的方式,先把 字符串 拼接出來,然后用execute immediate 'sql' 來執(zhí)行;
至于如果拼接出來 SQL,那就需要你去找規(guī)律,其實你可以對字符串做對此拼接,例如一下: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的規(guī)律只有你自己最清楚,誰都無法提供一個完整的解決方案!
本文題目:oracle中如何拼表名,oracle怎么改表名
瀏覽地址:http://jinyejixie.com/article48/dssidep.html
成都網站建設公司_創(chuàng)新互聯,為您提供商城網站、定制網站、App開發(fā)、移動網站建設、網站營銷、網站制作
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯