本文共 4196 字,大约阅读时间需要 13 分钟。
随着对Oracle数据库的使用不断深入,很多开发者都会遇到各种问题,尤其是在处理复杂查询、数据处理以及系统信息获取等方面。为了帮助大家解决这些问题,以下将整理一些常用的Oracle SQL技巧,供大家参考。
在处理时间和日期时,Oracle提供了丰富的函数和工具,可以帮助我们高效地完成时间格式转换和比较等操作。
SELECT SYSTIMESTAMP FROM DUAL;
SELECT SYSTIMESTAMP AT TIME ZONE dbtimezone FROM DUAL;
SELECT SYSTIMESTAMP AT TIME ZONE COALESCE(null,DBTIMEZONE) FROM DUAL;
SELECT COALESCE(null,DBTIMEZONE) FROM DUAL;
SELECT TRUNC(SYSTIMESTAMP AT TIME ZONE COALESCE(null,DBTIMEZONE)) FROM DUAL;
SELECT TO_DATE('031095','MMDDYY') FROM DUAL; 通过USERENV函数,我们可以获取当前会话的详细信息,包括语言、终端、会话ID等。
SELECT USERENV('LANGUAGE') FROM DUAL; SELECT SYS_CONTEXT('USERENV','TERMINAL') terminal, SYS_CONTEXT('USERENV','LANGUAGE') language, SYS_CONTEXT('USERENV','SESSIONID') sessionid, SYS_CONTEXT('USERENV','INSTANCE') instance, SYS_CONTEXT('USERENV','ENTRYID') entryid, SYS_CONTEXT('USERENV','ISDBA') isdba, SYS_CONTEXT('USERENV','NLS_TERRITORY') nls_territory, SYS_CONTEXT('USERENV','NLS_CURRENCY') nls_currency, SYS_CONTEXT('USERENV','NLS_CALENDAR') nls_calendar, SYS_CONTEXT('USERENV','NLS_DATE_FORMAT') nls_date_format, SYS_CONTEXT('USERENV','NLS_DATE_LANGUAGE') nls_date_language, SYS_CONTEXT('USERENV','NLS_SORT') nls_sort, SYS_CONTEXT('USERENV','CURRENT_USER') current_user, SYS_CONTEXT('USERENV','CURRENT_USERID') current_userid, SYS_CONTEXT('USERENV','SESSION_USER') session_user, SYS_CONTEXT('USERENV','SESSION_USERID') session_userid, SYS_CONTEXT('USERENV','PROXY_USER') proxy_user, SYS_CONTEXT('USERENV','PROXY_USERID') proxy_userid, SYS_CONTEXT('USERENV','DB_DOMAIN') db_domain, SYS_CONTEXT('USERENV','DB_NAME') db_name, SYS_CONTEXT('USERENV','HOST') host, SYS_CONTEXT('USERENV','OS_USER') os_user, SYS_CONTEXT('USERENV','EXTERNAL_NAME') external_name, SYS_CONTEXT('USERENV','IP_ADDRESS') ip_address, SYS_CONTEXT('USERENV','NETWORK_PROTOCOL') network_protocol, SYS_CONTEXT('USERENV','BG_JOB_ID') bg_job_id, SYS_CONTEXT('USERENV','FG_JOB_ID') fg_job_id, SYS_CONTEXT('USERENV','AUTHENTICATION_TYPE') authentication_type, SYS_CONTEXT('USERENV','AUTHENTICATION_DATA') authentication_dataFROM DUAL; 在处理数据时,Oracle提供了一些高级函数可以帮助我们简化操作。
SELECT column FROM table WHERE ROWNUM <= 10;
SELECT dbms_metadata.get_ddl('VIEW', 'RESERVATION_GENERAL_VIEW') FROM DUAL; SELECT text FROM user_views where rownum < 100;
SELECT * FROM ALL_SOURCE WHERE name='GET_SPRCIAL_REQUESTS' AND rownum < 10;
包中的代码通常会使用DfUnWraper进行加密,可以通过下载工具解密。
DECODE函数DECODE(value, if1, then1, if2, then2, ..., else, default)
COALESCE函数COALESCE(expression [ ,...n ])
NVL / NVLN函数NVL(expression1, expression2)
SIGN函数SIGN(n)
返回数字n的符号:大于0返回1,小于0返回-1,等于0返回0。
SELECT SYS_CONTEXT('USERENV','CURRENT_SCHEMA') FROM DUAL; SELECT * FROM all_users ORDER BY username;
SELECT * FROM dba_objects WHERE rownum < 10;
WITH temp AS ( SELECT 500 population, 'China' nation, 'Guangzhou' city FROM DUAL UNION ALL SELECT 1500 population, 'China' nation, 'Shanghai' city FROM DUAL UNION ALL SELECT 500 population, 'China' nation, 'Beijing' city FROM DUAL UNION ALL SELECT 1000 population, 'USA' nation, 'New York' city FROM DUAL UNION ALL SELECT 500 population, 'USA' nation, 'Bostom' city FROM DUAL UNION ALL SELECT 500 population, 'Japan' nation, 'Tokyo' city FROM DUAL)SELECT nation, wmsys.wm_concat(city) FROM ( SELECT nation, city FROM temp ORDER BY city) GROUP BY nation;
UPDATE_DATE <= TO_DATE('', 'yyyy-mm-dd') AND (rn.UPDATE_DATE <= TO_DATE('', 'yyyy-mm-dd') OR rn.UPDATE_DATE IS NULL); SELECT trunc(1.787) FROM DUAL;
'' IS NULL
SELECT * FROM v$sqlarea ORDER BY first_load_time DESC;SELECT * FROM v$sql ORDER BY first_load_time DESC;
CREATE FUNCTION get_products(in_test IN VARCHAR2) RETURN VARCHAR2 IS...RETURN rets;
以上技巧希望能为大家提供帮助,感兴趣的话可以继续探索Oracle数据库的更多奥秘。
转载地址:http://qmpfk.baihongyu.com/