请求编写函数验证cm_customers$rt表居民客户TAX_NUMBER是否为13位
Turn Your Query into a Reusable Validation Function
Let's convert your existing query into a function that identifies resident customers with invalid (non-13-digit) TAX_NUMBER values. I'll cover the most common scenario (Oracle PL/SQL) first, then note adjustments for other databases.
Oracle PL/SQL Function
This function returns a cursor containing all resident customers where TAX_NUMBER isn't exactly 13 digits (including cases where the value is NULL):
CREATE OR REPLACE FUNCTION get_invalid_resident_tax_numbers RETURN SYS_REFCURSOR IS v_result_cursor SYS_REFCURSOR; BEGIN -- Open cursor to fetch invalid records OPEN v_result_cursor FOR SELECT TAX_NUMBER, RESIDENT FROM cm_customers$rt WHERE RESIDENT = 'Y' AND (LENGTH(TRIM(TAX_NUMBER)) != 13 OR TAX_NUMBER IS NULL); -- Added TRIM to account for accidental whitespace, remove if not needed RETURN v_result_cursor; END; /
How to Use It
To display the invalid customer list directly in SQL*Plus or SQL Developer:
-- Declare a cursor variable VAR invalid_customers REFCURSOR; -- Execute the function EXEC :invalid_customers := get_invalid_resident_tax_numbers(); -- Print the results PRINT invalid_customers;
For SQL Server (If That's Your DB)
If you're using SQL Server, you can create a table-valued function instead:
CREATE FUNCTION get_invalid_resident_tax_numbers() RETURNS TABLE AS RETURN ( SELECT TAX_NUMBER, RESIDENT FROM cm_customers$rt WHERE RESIDENT = 'Y' AND (LEN(LTRIM(RTRIM(TAX_NUMBER))) != 13 OR TAX_NUMBER IS NULL) );
Call the Function
SELECT * FROM get_invalid_resident_tax_numbers();
Key Notes
- I added
TRIM/LTRIM(RTRIM)to handle accidental whitespace inTAX_NUMBER—remove this if you don't need it. - The function targets invalid records (opposite of your original query) since you wanted to show customers who don't meet the 13-digit requirement.
- If you need to throw an error instead of just returning records, we can adjust the function to raise exceptions, but returning the list is more practical for auditing.
内容的提问来源于stack exchange,提问作者Radu Drosu
相关产品推荐
相关产品推荐

