Hi,大家好,我是编程小6,很荣幸遇见你,我把这些年在开发过程中遇到的问题或想法写出来,今天说一说45 个非常有用的 Oracle 查询语句,希望能够帮助你!!!。
这里我们介绍的是 40+ 个非常有用的 Oracle 查询语句,主要涵盖了日期操作,获取服务器信息,获取执行状态,计算数据库大小等等方面的查询。这些是所有 Oracle 开发者都必备的技能,所以快快收藏吧!
SELECT TRUNC(SYSDATE, 'MONTH') "First day of current month" FROM DUAL;
获取当前月份的第一天运行这个命令能快速返回当前月份的第一天
SELECT TRUNC(LAST_DAY(SYSDATE)) "Last day of current month" FROM DUAL;
SELECT TRUNC(SYSDATE, 'YEAR') "Year First Day" FROM DUAL;
SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM dual
SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) number_of_days FROM DUAL;
SELECT SYSDATE,
LAST_DAY(SYSDATE) "Last",
LAST_DAY(SYSDATE) - SYSDATE "Days left"
FROM DUAL;
SELECT ROUND ( (MONTHS_BETWEEN ('01-Feb-2014', '01-Mar-2012') * 30), 0) num_of_days FROM DUAL; OR SELECT TRUNC(sysdate) - TRUNC(e.hire_date) FROM employees;
这个例子是计算员工入职的天数。
SELECT ADD_MONTHS(TRUNC(SYSDATE, 'MONTH'), I) START_DATE,
TRUNC(LAST_DAY(ADD_MONTHS(SYSDATE, I))) END_DATE
FROM XMLTABLE('for $i in 0 to xs:int(D) return $i' PASSING
XMLELEMENT(D,
FLOOR(MONTHS_BETWEEN(ADD_MONTHS(TRUNC(SYSDATE,
'YEAR') - 1,
12),
SYSDATE))) COLUMNS I
INTEGER PATH '.');
SELECT (SYSDATE - TRUNC (SYSDATE)) * 24 * 60 * 60 num_of_sec_since_morning FROM DUAL;
SELECT (TRUNC (SYSDATE+1) - SYSDATE) * 24 * 60 * 60 num_of_sec_left FROM DUAL;
SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME = 'TABLE_NAME';
SELECT COLUMN_NAME AS FOUND
FROM USER_TAB_COLS
WHERE TABLE_NAME = 'TABLE_NAME'
AND COLUMN_NAME = 'COLUMN_NAME';
SELECT DBMS_METADATA.get_ddl ('TABLE', 'TABLE_NAME', 'USER_NAME') FROM DUAL;
SELECT SYS_CONTEXT ('userenv', 'current_schema') FROM DUAL;
ALTER SESSION SET CURRENT_SCHEMA = new_schema;
SELECT * FROM v$version;
SELECT USERNAME, PROFILE, DEFAULT_TABLESPACE, TEMPORARY_TABLESPACE
FROM DBA_USERS;
SELECT * FROM nls_database_parameters;
SELECT VALUE FROM v$system_parameter WHERE name = 'compatible';
CREATE TABLE tab (col1 VARCHAR2 (10));
CREATE INDEX idx1 ON tab (UPPER (col1));
ANALYZE TABLE a COMPUTE STATISTICS;
ALTER DATABASE DATAFILE '/work/oradata/STARTST/STAR02D.dbf' resize 2000M;
SELECT SUBSTR(FILE_NAME, 1, 50), AUTOEXTENSIBLE FROM DBA_DATA_FILES;
SELECT TABLESPACE_NAME, AUTOEXTENSIBLE FROM DBA_DATA_FILES;
ALTER TABLESPACE data01 ADD DATAFILE '/work/oradata/STARTST/data01.dbf' SIZE 1000M AUTOEXTEND OFF;
ALTER DATABASE DATAFILE '/u01/app/Test_data_01.dbf' RESIZE 2G;
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_data_files;
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_segments;
SELECT SUM (bytes / 1024 / 1024) "size" FROM dba_segments WHERE owner = '&owner';
SELECT S.USERNAME || '(' || s.sid || ')-' || s.osuser UNAME,
s.program || '-' || s.terminal || '(' || s.machine || ')' PROG,
s.sid || '/' || s.serial# sid,
s.status "Status",
p.spid,
sql_text sqltext
FROM v$sqltext_with_newlines t, V$SESSION s, v$process p
WHERE t.address = s.sql_address
AND p.addr = s.paddr(+)
AND t.hash_value = s.sql_hash_value
ORDER BY s.sid, t.piece;
SELECT SS.USERNAME, SE.SID, VALUE / 100 CPU_USAGE_SECONDS
FROM V$SESSION SS, V$SESSTAT SE, V$STATNAME SN
WHERE SE.STATISTIC# = SN.STATISTIC#
AND NAME LIKE '%CPU used by this session%'
AND SE.SID = SS.SID
AND SS.STATUS = 'ACTIVE'
AND SS.USERNAME IS NOT NULL ORDER BY VALUE DESC;
SELECT A.SID,
A.SERIAL#,
B.USERNAME,
OPNAME OPERATION,
TARGET OBJECT,
TRUNC(ELAPSED_SECONDS, 5) "ET (s)",
TO_CHAR(START_TIME, 'HH24:MI:SS') START_TIME,
ROUND((SOFAR / TOTALWORK) * 100, 2) "COMPLETE (%)"
FROM V$SESSION_LONGOPS A, V$SESSION B
WHERE A.SID = B.SID
AND B.USERNAME NOT IN ('SYS', 'SYSTEM')
AND TOTALWORK > 0ORDER BY ELAPSED_SECONDS;
SELECT B.SID, B.SERIAL#, A.SPID PROCESSID, B.PROCESS CLIENTPID
FROM V$PROCESS A, V$SESSION B
WHERE A.ADDR = B.PADDR
AND B.AUDSID = USERENV('sessionid');
SELECT CREATED, TIMESTAMP, LAST_DDL_TIME
FROM ALL_OBJECTS
WHERE OWNER = 'MYSCHEMA'
AND OBJECT_TYPE = 'TABLE'
AND OBJECT_NAME = 'EMPLOYEE_TABLE';
SELECT *
FROM (SELECT ROWNUM,
SUBSTR(A.SQL_TEXT, 1, 200) SQL_TEXT,
TRUNC(A.DISK_READS / DECODE(A.EXECUTIONS, 0, 1, A.EXECUTIONS)) READS_PER_EXECUTION,
A.BUFFER_GETS,
A.DISK_READS,
A.EXECUTIONS,
A.SORTS,
A.ADDRESS
FROM V$SQLAREA A
ORDER BY 3 DESC)
WHERE ROWNUM < 10;
SELECT OSUSER, USERNAME, MACHINE, PROGRAM FROM V$SESSION ORDER BY OSUSER;
SELECT PROGRAM APPLICATION, COUNT(PROGRAM) NUMERO_SESIONES
FROM V$SESSION
GROUP BY PROGRAM
ORDER BY NUMERO_SESIONES DESC;
SELECT USERNAME USUARIO_ORACLE, COUNT(USERNAME) NUMERO_SESIONES
FROM V$SESSION
GROUP BY USERNAME
ORDER BY NUMERO_SESIONES DESC;
SELECT OWNER, COUNT(OWNER) NUMBER_OF_OBJECTS
FROM DBA_OBJECTS
GROUP BY OWNER
ORDER BY NUMBER_OF_OBJECTS DESC;
SELECT TO_CHAR(TO_DATE(1526, 'j'), 'jsp') FROM DUAL;
SELECT *
FROM DBA_SOURCE
WHERE UPPER(TEXT) LIKE '%FOO_SOMETHING%'
AND OWNER = 'USER_NAME';
WITH csv
AS (SELECT 'AA,BB,CC,DD,EE,FF'
AS csvdata
FROM DUAL)
SELECT REGEXP_SUBSTR (csv.csvdata, '[^,]+', 1, LEVEL) pivot_char
FROM DUAL, csv
CONNECT BY REGEXP_SUBSTR (csv.csvdata,'[^,]+', 1, LEVEL) IS NOT NULL;
SELECT * FROM EMPLOYEES WHERE ROWID IN (SELECT MAX(ROWID) FROM EMPLOYEES);
SELECT *
FROM EMPLOYEESMINUSSELECT *
FROM EMPLOYEES
WHERE ROWNUM < (SELECT COUNT(*) FROM EMPLOYEES);
WITH TBL AS
(SELECT -2 NUM
FROM DUAL
UNION
SELECT -3 NUM
FROM DUAL
UNION
SELECT -4 NUM
FROM DUAL),
SIGN_VAL AS
(SELECT CASE MOD(COUNT(*), 2)
WHEN 0 THEN
1
ELSE
-1
END VAL
FROM TBL
WHERE NUM < 0)
SELECT EXP(SUM(LN(ABS(NUM)))) * VAL FROM TBL, SIGN_VAL GROUP BY VAL;
SELECT LEVEL EMPL_ID,
MOD(ROWNUM, 50000) DEPT_ID,
TRUNC(DBMS_RANDOM.VALUE(1000, 500000), 2) SALARY,
DECODE(ROUND(DBMS_RANDOM.VALUE(1, 2)), 1, 'M', 2, 'F') GENDER,
TO_DATE(ROUND(DBMS_RANDOM.VALUE(1, 28)) || '-' ||
ROUND(DBMS_RANDOM.VALUE(1, 12)) || '-' ||
ROUND(DBMS_RANDOM.VALUE(1900, 2010)),
'DD-MM-YYYY') DOB,
DBMS_RANDOM.STRING('x', DBMS_RANDOM.VALUE(20, 50)) ADDRESS
FROM DUAL
CONNECT BY LEVEL < 10000;
SELECT ROUND (DBMS_RANDOM.VALUE () * 100) + 1 AS random_num FROM DUAL;
SELECT 1 FROM TABLE_NAME WHERE ROWNUM = 1;
如果你知道一些很好用的查询语句,可以减轻 Oracle 开发者的负担,那么在评论分享一下吧:)
今天的分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
上一篇
已是最后文章
下一篇
已是最新文章