I have a dynamic SQL query with different column names and tables at runtime.
I am looking to get the SQL query to ignore reading data based on if a row contains Null v
I am not sure what you mean by dynamic, but if you mean that you actually build your queries at runtime, then you can get all available column names of all columns (that are nullable or not) for a given table in a given database, then you can simply put them together for your desired query.
SELECT
COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
table_name = '<TABLE_NAME>'
AND IS_NULLABLE = 'YES'
AND TABLE_SCHEMA='<DB_NAME>';
(provided you already selected the correct database) (tables reference, columns reference)
SELECT
Cols.name
FROM sys.all_columns AS Cols
INNER JOIN sys.tables AS Tabs ON Cols.object_id = Tabs.object_id
WHERE
Tabs.name = '<TABLE_NAME>'
AND Cols.is_nullable = 1;
(having already selected the appropriate database)
SELECT
COLUMN_NAME
FROM ALL_TAB_COLUMNS
WHERE
TABLE_NAME = '<TABLE_NAME>'
AND NULLABLE = 'Y';
Not sure if this is a general Oracle-thing (as I am working mostly with SQL-Server), but when I tried this out with a fiddle, the table name I had to specify was always in uppercase letters.
I believe you will need to use a stored procedure or multiple joins(which might not be the healthiest solution) to solve this as Marc B indicated. You can also check the following question that addresses the same issue you are asking about.
No, there's no select where * is not null-type query. You have to test every field individually:
SELECT ...
FROM ...
WHERE field1 is not null AND field2 is not null AND .... AND fieldN is not null
You could try a COALESCE() operation, perhaps, but that's still ugly:
WHERE COALESCE(field1, field2, ..., fieldN, 'allarenull') <> 'allarenull'
but then you STILL have to list all of the fields in the table.