DECLARE
-- Procedure to add a column if it does not exist
PROCEDURE add_column_if_not_exists (
p_owner VARCHAR2,
p_table_name VARCHAR2,
p_column_name VARCHAR2,
p_column_type VARCHAR2
) IS
l_sql VARCHAR2(1024);
l_count NUMBER;
BEGIN
-- Check if column exists
SELECT COUNT(*)
INTO l_count
FROM ALL_TAB_COLUMNS
WHERE OWNER = p_owner
AND TABLE_NAME = p_table_name
AND COLUMN_NAME = p_column_name;
-- Add column if it does not exist
IF l_count = 0 THEN
l_sql := 'ALTER TABLE ' || p_owner || '.' || p_table_name || ' ADD (' || p_column_name || ' ' || p_column_type || ')';
DBMS_OUTPUT.PUT_LINE(l_sql);
EXECUTE IMMEDIATE l_sql;
END IF;
END;
-- Procedure to drop a column if it does exist
PROCEDURE drop_column_if_exists (
p_owner VARCHAR2,
p_table_name VARCHAR2,
p_column_name VARCHAR2
) IS
l_sql VARCHAR2(1024);
l_count NUMBER;
BEGIN
-- Check if column exists
SELECT COUNT(*)
INTO l_count
FROM ALL_TAB_COLUMNS
WHERE OWNER = p_owner
AND TABLE_NAME = p_table_name
AND COLUMN_NAME = p_column_name;
-- drop column if it does exist
IF l_count = 1 THEN
l_sql := 'ALTER TABLE ' || p_owner || '.' || p_table_name || ' DROP COLUMN ' || p_column_name;
DBMS_OUTPUT.PUT_LINE(l_sql);
EXECUTE IMMEDIATE l_sql;
END IF;
END;
BEGIN
...
END;
/
You might already know that Oracle regular expression doesn't support \b
. However, we need it. So the answer is
(^|\W)yourstring(\W|$)
Reference
We sometimes need to include a single quote in an SQL statement, I believe you already know the normal way, use two single quote characters to express one single quote. However, if you are using oracle 10g or a more recent version, the following way could be better:
This is a new feature of 10g that enables us to embed single-quotes in literal strings without having to resort to double, triple or sometimes quadruple quote characters. This is particularly useful for building dynamic SQL statements that contain quoted literals.
The mechanism is invoked with a simple "q" in PL/SQL only. The syntax is q'[...]', where the "[" and "]" characters can be any of the following as long as they do not already appear in the string.
Note that at the time of writing, the quoting mechanism only appears to work with 10g clients/OCI. If used with any software that uses an older Oracle client it fails with ORA-01756: quoted string not properly terminated (confirmed with sqlplus, TOAD and PL/SQL Developer).
If you want samples, see Reference
Don't waste time; here's the sample code with the Oracle database.
SELECT * FROM SampleTable WHERE sample_field in (7,3,4,6) ORDER BY INSTR(',7,3,4,6,', ',' || sample_field || ',');