oracle外键反查套件
用于查询我引用谁,谁引用我的问题 Examples: 查询我引用谁 SELECT*FROMTABLE(FK_UTIL.get_refering_stats(TABLE_A)); 查询谁引用我 SELECT*FROMTABLE(FK_UTIL.get_refered_stats(TABLE_A)); 查询ID为的某条记录的被引用计数 SELECT*FROMTABLE(FK_UTIL.get_re
用于查询我引用谁,谁引用我的问题Examples:
查询我引用谁
SELECT * FROM TABLE(FK_UTIL.get_refering_stats('TABLE_A'));
查询谁引用我
SELECT * FROM TABLE(FK_UTIL.get_refered_stats('TABLE_A'));
查询ID为的某条记录的被引用计数
SELECT * FROM TABLE(FK_UTIL.get_refered_count('TABLE_A', ID));
查询某种条件下的被引用计数
-- 查询code为1的某条记录的被引用计数
SELECT * FROM TABLE(FK_UTIL.get_refered_count_cond('xb_std_types', 'code', '1'));
查询某表在某种条件下的被引用情况,并且附带出更详细的信息
SELECT TABLE_A.id, TABLE_A.COLUMN1, TABLE_A.COLUMN2, ..., stats.child_table, stats.refer_count
FROM TABLE_A
JOIN TABLE(FK_UTIL.get_refered_count_cond('TABLE_A', 'COLUMN', 'VALUE')) stats
ON stats.parent_id=TABLE_A.id;
-- 以下是安装脚本 CREATE OR REPLACE TYPE fk_stats_row AS object ( child_table varchar2(32), child_table_fk_col varchar2(32), parent_table varchar2(32), parent_table_pk_col varchar2(32) ); / CREATE OR REPLACE TYPE fk_stats AS TABLE OF fk_stats_row; / CREATE OR REPLACE TYPE fk_refered_count_row AS object ( child_table varchar2(32), parent_id NUMBER(19), refer_count NUMBER(19) ); / CREATE OR REPLACE TYPE fk_refered_count AS TABLE OF fk_refered_count_row; / CREATE OR REPLACE TYPE id_array AS TABLE OF NUMBER(19); / CREATE OR REPLACE package FK_UTIL IS -- 获得我所引用的表 FUNCTION get_refering_stats(v_table_name varchar2) RETURN fk_stats; -- 获得所有子表及外键列 FUNCTION get_refered_stats(v_table_name varchar2) RETURN fk_stats; -- 获得所有子表对某个ID的引用条数 FUNCTION get_refered_count(v_parent_table varchar2, v_parent_id NUMBER) RETURN fk_refered_count; -- 获得所有子表对符合条件的某些记录的引用条数 FUNCTION get_refered_count_cond(v_parent_table varchar2, v_cond_col varchar2, v_cond varchar2) RETURN fk_refered_count; END FK_UTIL; / CREATE OR REPLACE package body FK_UTIL IS -- 获得我所引用的表 FUNCTION get_refering_stats(v_table_name varchar2) RETURN fk_stats IS v_ret fk_stats := fk_stats(); BEGIN SELECT CAST( multiset( SELECT a.TABLE_NAME 从表, a.column_name 外键列, b.TABLE_NAME 主表, b.column_name 被引用列 FROM ( SELECT uc.TABLE_NAME, ucc.column_name, uc.r_constraint_name FROM user_constraints uc JOIN user_cons_columns ucc ON uc.constraint_name = ucc.constraint_name WHERE uc.constraint_type='R' ) a, ( SELECT uc.TABLE_NAME, ucc.column_name, uc.constraint_name FROM user_constraints uc JOIN user_cons_columns ucc ON uc.constraint_name = ucc.constraint_name ) b WHERE a.r_constraint_name = b.constraint_name AND a.TABLE_NAME = UPPER(v_table_name) ) AS fk_stats ) INTO v_ret FROM dual; RETURN v_ret; END get_refering_stats; -- 获得所有子表及外键列 FUNCTION get_refered_stats(v_table_name varchar2) RETURN fk_stats IS v_ret fk_stats := fk_stats(); BEGIN SELECT CAST( multiset( SELECT a.TABLE_NAME 从表, a.column_name 外键列, b.TABLE_NAME 主表, b.column_name 被引用列 FROM ( SELECT uc.TABLE_NAME, ucc.column_name, uc.r_constraint_name FROM user_constraints uc JOIN user_cons_columns ucc ON uc.constraint_name = ucc.constraint_name WHERE uc.constraint_type='R' ) a, ( SELECT uc.TABLE_NAME, ucc.column_name, uc.constraint_name FROM user_constraints uc JOIN user_cons_columns ucc ON uc.constraint_name = ucc.constraint_name ) b WHERE a.r_constraint_name = b.constraint_name AND b.TABLE_NAME = UPPER(v_table_name) ) AS fk_stats ) INTO v_ret FROM dual; RETURN v_ret; END get_refered_stats; -- 获得所有子表对某个ID的引用条数 FUNCTION get_refered_count(v_parent_table varchar2, v_parent_id NUMBER) RETURN fk_refered_count IS v_ret fk_refered_count := fk_refered_count(); v_count NUMBER := 0; v_sql varchar2(2000) := ''; BEGIN FOR v_row IN (SELECT * FROM TABLE(get_refered_stats(v_parent_table))) loop v_sql := 'select count(*) from '|| v_row.child_table ||' where ' || v_row.child_table_fk_col || ' = ' || v_parent_id; EXECUTE immediate v_sql INTO v_count; v_ret.extend(1); v_ret(v_ret.COUNT) := fk_refered_count_row(v_row.child_table, v_parent_id, v_count); END loop; RETURN v_ret; END get_refered_count; -- 获得所有子表对符合条件的某些记录的引用条数 FUNCTION get_refered_count_cond(v_parent_table varchar2, v_cond_col varchar2, v_cond varchar2) RETURN fk_refered_count IS v_ret fk_refered_count := fk_refered_count(); v_id_array id_array := id_array(); v_sql varchar2(2000) := ''; BEGIN IF UPPER(v_cond_col) LIKE '%ID' THEN v_sql := 'select cast(multiset(select id from ' || v_parent_table || ' where '|| v_cond_col ||'=' || v_cond || ') as id_array) from dual'; ELSE v_sql := 'select cast(multiset(select id from ' || v_parent_table || ' where '|| v_cond_col ||'=''' || v_cond || ''') as id_array) from dual'; END IF; EXECUTE immediate v_sql INTO v_id_array; FOR id_row IN (SELECT * FROM TABLE(v_id_array)) loop FOR count_row IN (SELECT * FROM TABLE(get_refered_count(v_parent_table, id_row.column_value))) loop v_ret.extend(1); v_ret(v_ret.COUNT) := fk_refered_count_row(count_row.child_table, count_row.parent_id, count_row.refer_count); END loop; END loop; RETURN v_ret; END get_refered_count_cond; END FK_UTIL; /

Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

Notepad++7.3.1
Easy-to-use and free code editor

SublimeText3 Chinese version
Chinese version, very easy to use

Zend Studio 13.0.1
Powerful PHP integrated development environment

Dreamweaver CS6
Visual web development tools

SublimeText3 Mac version
God-level code editing software (SublimeText3)

Hot Topics

The function in Oracle to calculate the number of days between two dates is DATEDIFF(). The specific usage is as follows: Specify the time interval unit: interval (such as day, month, year) Specify two date values: date1 and date2DATEDIFF(interval, date1, date2) Return the difference in days

The retention period of Oracle database logs depends on the log type and configuration, including: Redo logs: determined by the maximum size configured with the "LOG_ARCHIVE_DEST" parameter. Archived redo logs: Determined by the maximum size configured by the "DB_RECOVERY_FILE_DEST_SIZE" parameter. Online redo logs: not archived, lost when the database is restarted, and the retention period is consistent with the instance running time. Audit log: Configured by the "AUDIT_TRAIL" parameter, retained for 30 days by default.

The Oracle database startup sequence is: 1. Check the preconditions; 2. Start the listener; 3. Start the database instance; 4. Wait for the database to open; 5. Connect to the database; 6. Verify the database status; 7. Enable the service (if necessary ); 8. Test the connection.

The INTERVAL data type in Oracle is used to represent time intervals. The syntax is INTERVAL <precision> <unit>. You can use addition, subtraction, multiplication and division operations to operate INTERVAL, which is suitable for scenarios such as storing time data and calculating date differences.

To find the number of occurrences of a character in Oracle, perform the following steps: Get the total length of a string; Get the length of the substring in which a character occurs; Count the number of occurrences of a character by subtracting the substring length from the total length.

Oracle database server hardware configuration requirements: Processor: multi-core, with a main frequency of at least 2.5 GHz. For large databases, 32 cores or more are recommended. Memory: At least 8GB for small databases, 16-64GB for medium sizes, up to 512GB or more for large databases or heavy workloads. Storage: SSD or NVMe disks, RAID arrays for redundancy and performance. Network: High-speed network (10GbE or higher), dedicated network card, low-latency network. Others: Stable power supply, redundant components, compatible operating system and software, heat dissipation and cooling system.

The amount of memory required by Oracle depends on database size, activity level, and required performance level: for storing data buffers, index buffers, executing SQL statements, and managing the data dictionary cache. The exact amount is affected by database size, activity level, and required performance level. Best practices include setting the appropriate SGA size, sizing SGA components, using AMM, and monitoring memory usage.

The method of replacing strings in Oracle is to use the REPLACE function. The syntax of this function is: REPLACE(string, search_string, replace_string). Usage steps: 1. Identify the substring to be replaced; 2. Determine the new string to replace the substring; 3. Use the REPLACE function to replace. Advanced usage includes: multiple replacements, case sensitivity, special character replacement, etc.
