Question: I have a motor vehicle
application where I need to build a SQL statement based on the
presence of NOT NULL values on an input screen. I am collecting the
following screen values; license_plate_nbr, color,
vehicle_make, vehicle_model and vehicle_type.
How do I build and execute a dynamic SQL statement?
Answer: You can write a stored procedure
that uses the EXECUTE IMMEDIATE function to execute a dynamic SQL
statement. The parameters are positional based on a prototype:
exec vehicle_query(
license_plate_nbr,
vehicle_primary_color,
vehicle_make,
vehicle_model,
vehicle_type);
For example, the following is the query to display all blue Ford
cars.
Note that all omitted characters are designated by a comma:
exec vehicle_query( ,'Blue', 'Ford',,);
Next we need to build a SQL statement that adds WHERE
clause predicates based on the presence or absence of the passed
arguments.
Note: This is pseudocode, not tested:
create or replace procedure
vehicle_query
as
BEGIN
i_license_nbr
varchar2(8),
i_vehicle_primary_color
varchar2(10),
i_vehicle_make
varchar2(10),
i_vehicle_make
varchar2(10),
i_vehicle_model
varchar2(10),
i_vehicle_type
varchar2(10),
sql_str
varchar2(100) := '';
BEGIN
-- Initialize the SQL statement
with everything bit the end semicolon
sql_str := 'select *
from vehicle where 1=1'
-- Here, be careful to get the quote
marks to resolve properly
if i_license_nbr is not null then
sql_str := sql_str|| ' and vehicle_license_nbr
contains('%:i_license_nbr%')'
if i_vehicle_primary_color is
not null then
sql_str := sql_str|| ' and
vehicle_primary_color = ':i_vehicle_license_nbr')'
-- etc.
-- end the sql statement
sql_str = sql_str||';'
--
verify the SQL
dbms_output.put_line(:sql_str);
--
execute the sql:
execute immediate(:sql_str);
END
/;
|
|
|
|
Guarantee your Success!
Oracle is the
world's most complex, robust and flexible database, considered
impossible to master without a mentor.
That's why all BC
Oracle trainers are working professionals, experts in Oracle who
share their tips and secrets. |
|
| |
|
Burleson is the American Team

Note:
This Oracle
documentation was created as a support and Oracle training reference for use by our
DBA performance tuning consulting professionals.
Feel free to ask questions on our
Oracle forum.
Verify
experience!
Anyone
considering using the services of an Oracle support expert should
independently investigate their credentials and experience, and not rely on
advertisements and self-proclaimed expertise. All legitimate Oracle experts
publish
their Oracle
qualifications.
Errata?
Oracle technology is changing and we
strive to update our BC Oracle support information. If you find an error
or have a suggestion for improving our content, we would appreciate your
feedback. Just
e-mail:
and include the URL for the page.
Copyright ? 1996 - 2012
All rights reserved.
Oracle ?
is the registered trademark of Oracle Corporation.
|
|