Oracle資料庫常用SQL

2021-10-09 10:26:01 字數 4228 閱讀 5691

-- oracle ora-00984: column not allowed here/ora-00984錯誤: 列在此處不允許

-- 當資料以char的形式存在時,應加單引號,則插入資料庫就不會出現類似錯誤.

-- oracle實現select的結果集隨機展示

select * from tablename order by dbms_random.value();

-- oracle四捨五入保留兩位小數

select to_char('變數','fm99999999999.00') from dual;

-- 強制使用索引

select /*+rowid(tablename)*/ count(1) from tablename;

-- oracle日期查詢

select to_date('2020-01-01 10:22:18','yyyy-mm-dd hh:mi:ss') from dual;

select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;

-- ddd 一年中的第幾天

select sysdate,to_char(sysdate,'yyyy-ddd hh24:mi:ss') from dual;-- 2020-167 14:59:16

-- iw iso標準的年中的第幾周,d 一周中的第幾天,週日算第一天

select sysdate,to_char(sysdate,'yyyy-mm iw-d hh24:mi:ss') from dual;-- 2020-09 39-2 14:59:16

-- 當前時間減去7分鐘的時間

select sysdate,sysdate - interval '7' minute from dual;

-- 當前時間減去7小時的時間

select sysdate,sysdate - interval '7' hour from dual;

-- 當前時間減去7天的時間

select sysdate,sysdate - interval '7' day from dual;

-- 當前時間減去7月的時間

select sysdate,sysdate - interval '7' month from dual;

-- 當前時間減去7年的時間

select sysdate,sysdate - interval '7' year from dual;

-- 時間間隔乘以乙個數字,減去7小時的時間

select sysdate,sysdate - 3.5 *interval '2' hour from dual;

-- trunc()用於擷取時間或者數值,返回指定的值

select trunc(sysdate ,'year') from dual;-- 2020-01-01 00:00:00

select trunc(sysdate) from dual;-- 2020-09-23 00:00:00

select to_char(trunc(sysdate ,'yyyy'),'yyyy') from dual;-- 2020

select trunc(12.345,2) from dual;-- 12.34;

select trunc(12.3,-2) from dual;-- 0

select trunc(123.4,-2) from dual;-- 100

select trunc(12.3) from dual;-- 12

--返回當前時間的日月年小時分秒毫秒,可以指定秒後面的精度(最大=9)

select to_char(current_timestamp(5),'dd-mon-yyyy hh24:mi:ssxff') from dual;-- 11-sep-2020 14:55:23.29600

-- 行轉列函式listagg

select listagg(to_char(columns1),',') within group(order by columns2) as columns1 from tablename;-- 分組和排序關鍵字是必須的

-- 上面的sql可能會導致ora-01489: result of string concatenation is too long,可使用下面的方式

select xmlagg(xmlparse(content columns1||',' wellformed) order by columns2).getclobval() as columns1 from tablename;

-- 獲取使用者下所有表名

select table_name from user_tables where tablespace_name is not null and user='user_name';

-- 獲取表的列名和資料型別

select table_name, column_name, data_type from all_tab_cols where table_name = 'tablename ';

-- 檢視所有使用者物件,包含了表,檢視,索引,函式等

select uo.object_name,uo.object_type from user_objects uo where uo.object_type<>'lob' order by uo.object_type desc;

-- 查詢沒有索引的表

select table_name from user_tables where table_name not in(select distinct table_name from user_indexes);

-- 刪除使用者下的所有表,dml,可恢復,不會自動提交事務,只刪除內容。速度drop>truncate>delete

select 'delete from '|| table_name || ';' from user_tables order by table_name;

-- 刪除使用者下的所有表,ddl,不可恢復,會自動提交事務,只刪除內容

select 'truncate table '|| table_name || ';' from user_tables order by table_name;

-- 徹底刪除,下面包含了刪除後殘留的bin$開頭的表,ddl,不可恢復,會自動提交事務,刪除表結構和內容

select 'drop table '||table_name||';' from cat where table_type='table' order by table_name;

-- 如果有刪除使用者的許可權,使用下面的語句,刪除後再建立該使用者。加了cascade就可以把使用者和資料全部刪掉

drop user user_name cascade;

-- 禁止所有的外來鍵約束

select 'alter table ' || table_name || ' disable constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'r';

-- 開啟已經禁止的外來鍵

select 'alter table ' || table_name || ' enable constraint ' || constraint_name || ';' from user_constraints where constraint_type = 'r';

-- 如何刪除擁有1億條資料的表,只保留其中的5條(為什麼不把5條資料放到臨時表後,把原表drop掉,把臨時表改名)

into #臨時表 select 5條資料 from 1億條資料的表;

truncate table 1億條資料的表;

insert 1億條資料的表 select * from #臨時表;

drop table #臨時表;

-- 檢視索引狀態//ora-01502: index 'index_name' or partition of such index is in unusable state,一般是因為索引狀態為unusable引起的

select owner, index_name,status from all_indexes where index_name='indexname';

select index_name,status from user_indexes where index_name='indexname';

-- 重建索引

alter index indexname rebuild;

ORACLE資料庫常用SQL

1.新增乙個表,通過另乙個表的結構和資料 create table product bak as select from product2.如果表存在 insert into product bak select from product 3.同乙個表中,將a欄位的指賦給b欄位 update pro...

Oracle資料庫常用SQL

oracle資料庫建立例項的過程類似於sql server建立資料庫,oracle乙個例項可以對應多個表空間,乙個表空間對應乙個使用者,根據不同的使用者名稱 密碼登入不同的表空間。因此,建立表空間後,緊接著要建立使用者並為其指定表空間。並授權給該使用者,一般是connect resource dba...

oracle常用資料庫sql語句

建立表空間 create bigfile tablespace 表空間名稱 datafile 表空間路徑 size 100m autoextend on extent management local autoallocate 建立使用者 create user 使用者名稱 identified b...