-- 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...