-- connect to the Omnidex Data source file
instance_num := odx.connect_env('orders.dsn','file=dsn,networkservices=odxsrvr');
-- open a cursor
cursor_num := odx.open_cursor(instance_num);
-- qualify rows using MDK indexes
odx.parse_sql(cursor_num, 'qualify customers
where company = :kwd');
-- assign the keyword
odx.set_variable(cursor_num, ':kwd', 'boe*');
-- execute the sql and get the qualifying count
qual_count := odx.execute_sql(cursor_num);
dbms_output.put_line('Rows qualified: ' || to_char(qual_count));
-- show the qualified rows and its child-table rows
odx.parse_sql(cursor_num, 'select customer_no,company,contact
from customers with odxid');
-- set the column types
odx.set_column_type(cursor_num, 1, customer_num);
odx.set_column_type(cursor_num, 2, company);
odx.set_column_type(cursor_num, 3, contact);
-- execute the select sql
ignore := odx.execute_sql(cursor_num);
-- open a second cursor for child table retrieval
child_cursor := odx.open_cursor(instance_num);
-- select rows from the child table
odx.parse_sql(child_cursor,
'select customer_no,date_tickler,tickler,initials,action_info
from activity where customer_no = :cust_no order by date_tickler
desc');
-- define the column list for the child table
odx.set_column_type(child_cursor, 1, customer_num);
odx.set_column_type(child_cursor, 2, date_tickler);
odx.set_column_type(child_cursor, 3, tickler);
odx.set_column_type(child_cursor, 4, initials);
odx.set_column_type(child_cursor, 5, action_info);
-- fetch the row from the parent table until the end
while odx.get_row(cursor_num) > 0 loop
--
get the column values from parent table
odx.get_column(cursor_num,
1, customer_num);
odx.get_column(cursor_num,
2, company);
odx.get_column(cursor_num,
3, contact);
--
display it
counter
:= odx.get_last_row_count(cursor_num);
dbms_output.put_line(
to_char( counter) || ') ' || to_char(customer_num)
||
' ' || company || ' ' || contact);
--
retrieve the rows from the child table for this particular
customer number
odx.set_variable(child_cursor,
':cust_no', customer_num);
ignore
:= odx.execute_sql(child_cursor);
--
fetch the child-table rows
while
odx.get_row(child_cursor) > 0 loop
--
get the column values from child table
odx.get_column(child_cursor,
1, customer_num);
odx.get_column(child_cursor,
2, date_tickler);
odx.get_column(child_cursor,
3, tickler);
odx.get_column(child_cursor,
4, initials);
odx.get_column(child_cursor,
5, action_info);
--
display it
dbms_output.put_line(
' - ' || to_char(customer_num) || ' ' ||
to_char(date_tickler)
|| ' ' || tickler || ' ' || initials ||
' '
|| action_info);
end
loop;
end loop;
-- clean up
odx.close_cursor(child_cursor);
odx.close_cursor(cursor_num);
odx.disconnect_env(instance_num);
exception
when
others then
dbms_output.put_line('Error
occured.');
--
check if we need to close the cursors to free up resources
if
odx.is_opened(cursor_num) then
odx.close_cursor(cursor_num);
end
if;
if
odx.is_opened(child_cursor) then
odx.close_cursor(child_cursor);
end
if;
--
check if we need to disconnect to free up resources
if
odx.is_connected(instance_num) then
odx.disconnect_env(instance_num);
end
if;
--
raise the exception
raise;
end;
/
-- end of PL/SQL Procedure Example
top
|