45개의 유용한 Oracle 쿼리 문 요약

15230 단어
날짜/시간 관련 질의
1. 현재 달의 첫날에 이 명령을 실행하면 현재 달의 첫날로 빠르게 돌아갈 수 있습니다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
SELECT TRUNC (SYSDATE, 'MONTH') "First day of current month"
    FROM DUAL;

2. 현재 달의 마지막 날 가져오기
이 검색어는 위의 문장과 유사하고 윤년을 충분히 고려했기 때문에 2월에 29일이 있으면 29/2로 돌아간다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
SELECT TRUNC (LAST_DAY (SYSDATE)) "Last day of current month"
    FROM DUAL;

3. 현재 년도를 획득하는 첫날은 매년 1월 1일이다. 이 검색어는 저장 과정에서 사용할 수 있고 현재 년도의 첫날에 대해 계산을 해야 할 때이다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
SELECT TRUNC (SYSDATE, 'YEAR') "Year First Day" FROM DUAL;

4. 현재 연도의 마지막 날 가져오기
위의 조회문과 유사하다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.

   SELECT ADD_MONTHS (TRUNC (SYSDATE, 'YEAR'), 12) - 1 "Year Last Day" FROM DUAL 
 

5. 현재 월의 일수 얻기
이 문장은 매우 유용해서 현재 달의 일수를 계산해 낼 수 있다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
SELECT CAST (TO_CHAR (LAST_DAY (SYSDATE), 'dd') AS INT) number_of_days  FROM DUAL;

6. 현재 월의 남은 일수 아래의 문장을 가져와 현재 월의 남은 일수를 계산한다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
 SELECT SYSDATE, 
        LAST_DAY (SYSDATE) "Last", 
        LAST_DAY (SYSDATE) - SYSDATE "Days left"
   FROM DUAL;

7. 두 날짜 사이의 일수를 얻기 위해 이 문장을 사용하면 두 날짜가 다른 두 날짜의 자체 검사 일수를 얻을 수 있다.
 
  
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;

만약 특정 날짜의 일수를 조회할 필요가 있다면 두 번째 조회 문구를 사용할 수 있습니다.이 예는 직원의 입사 일수를 계산하는 것이다.
8. 현재 연도가 지난달까지 매달 시작되고 끝난 날짜를 표시합니다
이것은 현재 연도의 매달 시작과 끝의 날짜를 나타내는 똑똑한 검색어구입니다. 이것은 몇 가지 종류의 계산을 할 수 있습니다."SYSDATE"를 모든 날짜 값으로 대체해서 조회 날짜를 지정할 수 있습니다.
 
  
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 '.');

9. 지금까지 오늘의 지난 초수를 획득(00:00부터 계산)

   SELECT (SYSDATE - TRUNC (SYSDATE)) * 24 * 60 * 60 num_of_sec_since_morning FROM DUAL; 
 

10. 오늘 남은 초(23:59:59까지 획득)

   SELECT (TRUNC (SYSDATE+1) - SYSDATE) * 24 * 60 * 60 num_of_sec_left FROM DUAL; 
 

데이터 사전 조회
11. 현재 데이터베이스 모드에서 지정한 테이블이 있는지 확인
이것은 간단한 조회문구입니다. 현재 데이터베이스에 당신이 만들고 싶은 테이블이 있는지 확인하고, 테이블 스크립트를 다시 실행할 수 있으며, 현재 사용자가 지정한 테이블을 만들었는지 확인할 수 있습니다. (이 조회문이 어떤 환경에서 실행되었는지에 따라 조회할 수 있습니다.)
 
  
SELECT table_name
  FROM user_tables
 WHERE table_name = 'TABLE_NAME';

12. 현재 테이블에 지정된 열이 있는지 확인
이것은 테이블에 지정한 열이 있는지 확인하기 위한 간단한 검색 문구입니다. Alter TABLE를 사용하여 새 열을 테이블에 추가하려고 시도할 때 매우 유용합니다. 이 열이 이미 존재하는지 알려 줍니다.
 
  
SELECT column_name AS FOUND
  FROM user_tab_cols
 WHERE table_name = 'TABLE_NAME' AND column_name = 'COLUMN_NAME';

13. 테이블 구조 표시
이 질의문에는 테이블의 DDL 상태 정보가 표시됩니다.우리는 이미'TABLE'를 첫 번째 정보로 제출했음을 주의하세요.이 질의문은 모든 데이터베이스 객체에 대한 DDL 상태 정보를 가져오는 데도 사용됩니다.예를 들어 첫 번째 파라미터를'VIEW'로 바꾸고 두 번째 파라미터를 보기의 이름으로 바꾸면 보기의 DDL 정보를 조회할 수 있다.
 
  
SELECT DBMS_METADATA.get_ddl ('TABLE', 'TABLE_NAME', 'USER_NAME') FROM DUAL;

14. 현재 모드를 가져옵니다. 이것은 현재 모드의 이름을 얻을 수 있는 또 다른 검색어입니다.
 
  
SELECT SYS_CONTEXT ('userenv', 'current_schema') FROM DUAL;

15. 현재 모드를 수정하는 것은 현재 모드를 수정할 수 있는 또 다른 검색 문장입니다. 스크립트가 지정한 사용자 아래에서 실행되기를 원할 때 매우 유용하고 안전한 방법입니다.
 
  
ALTER SESSION SET CURRENT_SCHEMA = new_schema;

데이터베이스 관리 쿼리
16. 데이터베이스 버전 정보
Oracle 데이터베이스 버전으로 돌아가기
 
  
SELECT * FROM v$version;

17. 데이터베이스 기본 정보
시스템의 기본 정보를 되돌려줍니다.
 
  
SELECT username,
       profile,
       default_tablespace,
       temporary_tablespace
  FROM dba_users;

18. 데이터베이스 문자 설정 정보 데이터베이스 문자 설정 정보 표시
 
  
SELECT * FROM nls_database_parameters;

19. Oracle 버전 가져오기
 
  
SELECT VALUE
  FROM v$system_parameter
 WHERE name = 'compatible';

20. 대소문자를 구분하는 데이터를 저장하지만 인덱스는 대소문자를 구분하지 않는다
어떤 때는 데이터베이스에서 독립된 데이터를 조회하고 싶을 수도 있고, UPPER (...) =UPPER(..) 대소문자를 구분하지 않는 검색을 하기 위해 색인을 대소문자를 구분하지 않고 그렇게 많은 공간을 차지하지 않도록 하려면 이 문장이 당신의 요구를 충족시킬 수 있다.
 
  
CREATE TABLE tab (col1 VARCHAR2 (10));
CREATE INDEX idx1
   ON tab (UPPER (col1));
ANALYZE TABLE a COMPUTE STATISTICS;

21. 데이터 파일이 추가되지 않은 테이블 공간 조정
테이블 공간 크기를 조정하기 위한 다른 DDL 쿼리
 
  
ALTER DATABASE DATAFILE '/work/oradata/STARTST/STAR02D.dbf' resize 2000M;

22. 검사표 공간의 자동 확장 스위치
주어진 테이블 공간에서 자동 확장 스위치를 열었는지 조회하기
 
  
SELECT SUBSTR (file_name, 1, 50), AUTOEXTENSIBLE FROM dba_data_files;
(OR)
SELECT tablespace_name, AUTOEXTENSIBLE FROM dba_data_files;

23. 테이블 공간에 데이터 파일 추가
테이블 공간에 데이터 파일 추가
 
  
ALTER TABLESPACE data01 ADD DATAFILE '/work/oradata/STARTST/data01.dbf'
    SIZE 1000M AUTOEXTEND OFF;

24. 데이터 파일 크기 증가
지정한 테이블 공간의 크기를 늘려줍니다
 
  
ALTER DATABASE DATAFILE '/u01/app/Test_data_01.dbf' RESIZE 2G;

25. 조회 데이터베이스의 실제 크기
실제 데이터베이스 크기를 GB 단위로 제공
 
  
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_data_files;

26. 데이터베이스에서 데이터가 차지하는 크기나 데이터베이스 사용 디테일을 조회하여 데이터베이스에서 데이터가 차지하는 공간 크기
 
  
SELECT SUM (bytes) / 1024 / 1024 / 1024 AS GB FROM dba_segments;

27. 쿼리 모드 또는 사용자 크기를 MB 단위로 사용자 공간 크기 제공
 
  
SELECT SUM (bytes / 1024 / 1024) "size"
  FROM dba_segments
 WHERE owner = '&owner';

28. 조회 데이터베이스에서 모든 사용자가 마지막으로 사용하는 SQL 조회 이 조회 문구는 현재 데이터베이스에서 모든 사용자가 마지막으로 사용하는 SQL 문구를 표시합니다.
 
  
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;

성능 관련 조회 29.사용자 CPU 사용률 조회
이 문장은 모든 사용자의 CPU 사용률을 표시하는데 사용되며 사용자가 데이터베이스 부하 상황을 이해하는 데 도움이 된다
 
  
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;

30. 데이터베이스 긴 조회 진행 상황 조회 실행 중인 긴 조회 진행 상황 표시
 
  
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 > 0
ORDER BY elapsed_seconds;

31. 현재 세션 ID, 프로세스 ID, 클라이언트 ID 등을 가져오면 프로세스 ID와 세션 ID로 voodoo magic를 만들고 싶은 사용자에게 제공합니다.
 
  
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');

•V$SESSION.SID AND V$SESSION.SERIAL#은 데이터베이스 프로세스 ID • V$PROCESS입니다.SPID는 데이터베이스 서버 백그라운드 프로세스 ID • V$SESSION입니다.PROCESS는 클라이언트 PROCESS ID, ON 윈도우즈 it IS: separated THE FIRST # IS THE PROCESS ID ON THE client AND 2nd one IS THE READ id입니다.
32. 특정한 패턴이나 테이블에서 실행된 마지막 SQL 문장을 조회한다
 
  
SELECT CREATED, TIMESTAMP, last_ddl_time
  FROM all_objects
 WHERE     OWNER = 'MYSCHEMA'
       AND OBJECT_TYPE = 'TABLE'
       AND OBJECT_NAME = 'EMPLOYEE_TABLE';

33. 읽기 실행당 상위 10개의 SQL 쿼리
 
  
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;

34. 뷰에서 실제 Oracle 접속 조회 및 표시
 
  
SELECT osuser,
         username,
         machine,
         program
    FROM v$session
ORDER BY osuser;

35. 연결 프로그램을 열어 연결을 여는 그룹을 조회하고 표시
 
  
SELECT program application, COUNT (program) Numero_Sesiones
    FROM v$session
GROUP BY program
ORDER BY Numero_Sesiones DESC;

36. Oracle에 연결된 사용자 및 사용자의 세션 수를 쿼리 및 표시
 
  
SELECT username Usuario_Oracle, COUNT (username) Numero_Sesiones
    FROM v$session
GROUP BY username
ORDER BY Numero_Sesiones DESC;

37. 소유자의 대상 수량 얻기
 
  
SELECT owner, COUNT (owner) number_of_objects
    FROM dba_objects
GROUP BY owner
ORDER BY number_of_objects DESC;

38. 숫자를 문자로 변환하여 더 많은 정보를 볼 수 있음: Converting number into words in Oracle
 
  
SELECT TO_CHAR (TO_DATE (1526, 'j'), 'jsp') FROM DUAL;

출력:
 
  
one thousand five hundred twenty-six

39. 가방의 원본 코드에서 문자열 조회
이 질의문은 모든 패키지의 소스 코드에서'FOO'를 검색합니다.SOMETHING '은 사용자가 원본 코드에서 특정한 저장 프로세스나 함수 호출을 찾을 수 있도록 도와줍니다.
 
  
--search a string foo_something in package source code
SELECT *
  FROM dba_source
 WHERE UPPER (text) LIKE '%FOO_SOMETHING%'
AND owner = 'USER_NAME';

40. 쉼표로 구분된 데이터를 표에 삽입한다
쉼표로 구분된 문자열을 테이블에 삽입하고 싶을 때, 예를 들어 IN이나 NOT IN 같은 다른 검색 문구를 사용할 수 있다.여기서 우리는'AA,BB,CC,DD,EE,FF'를 A,BB,CC 등을 일렬로 포함하는 시계로 바꾸면 이 문자열을 다른 시계에 쉽게 삽입하고 관련 조작을 신속하게 할 수 있다.
 
  
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;

41. 조회표의 마지막 기록
이 검색 문장은 매우 직접적이다. 표에 메인 키가 없거나 사용자가 최대 메인 키가 최신의 기록인지 아닌지를 확인하지 못할 때 이 문장을 사용하여 표의 마지막 기록을 조회할 수 있다.
 
  
SELECT *
  FROM employees
 WHERE ROWID IN (SELECT MAX (ROWID) FROM employees);

(OR)

SELECT * FROM employees
MINUS
SELECT *
  FROM employees
 WHERE ROWNUM < (SELECT COUNT (*) FROM employees);


42. Oracle에서 행 데이터 곱셈
이 검색어는 줄마다 수치 곱셈을 하기 위해 복잡한 수학 함수를 사용한다.자세한 내용은 Row Data Multiplication In Oracle 참조
 
  
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;

43. Oracle에서 랜덤 데이터 생성
모든 개발자들은 데이터베이스를 테스트하기 위해 무작위 데이터를 쉽게 만들 수 있기를 원한다. 아래의 이 조회문은 당신을 만족시킬 수 있다. 이것은 Oracle에서 무작위 데이터를 생성하여 표에 삽입할 수 있다.자세한 내용은 Random Data in Oracle 을 참조하십시오.
 
  
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;

44. Oracle에서 무작위 수치를 생성합니다. 이것은 Oracle의 일반적인 무작위 수치 생성기입니다.이것은 0-100 사이의 무작위 수치를 생성할 수 있습니다. 만약 당신이 수치 범위를 설정하고 싶다면 곱셈을 바꾸면 됩니다.
 
  
--generate random number between 0 and 100
SELECT ROUND (DBMS_RANDOM.VALUE () * 100) + 1 AS random_num FROM DUAL;

45. 테이블에 데이터가 있는지 확인
이것은 많은 중국어 쓰기 방법이 있습니다.count(*)를 사용하여 표의 줄의 수량을 볼 수 있지만, 이 검색 문장은 비교적 효율적이고 빠르며, 우리는 단지 표에 어떤 데이터가 있는지 알고 싶을 뿐입니다.
 
  
SELECT 1
FROM TABLE_NAME
WHERE ROWNUM = 1;

Oracle 개발자의 부담을 줄일 수 있는 유용한 검색어를 알고 있다면 댓글에 공유해 보세요:)

좋은 웹페이지 즐겨찾기