Example is given for Pre-Query and Post-Query triggers in Oracle Forms, with using Display_Item built-in in Post-Query triggers to highlight fields dynamically.

This is the screen shot below for this example:


You can also download this form from the following link: Query.fmb

The example is based on HR schema departments table. In this example Department No. and Execute Query push button is in upper block named "Ctrl" block and below block is the departments block. User will be asked to enter department no. in above block and then to click on Execute Query button to filter the records below. The filtration is handled in Pre-Query trigger and after execution of query the Manager Name and Salary will be populated in Post-Query trigger by dynamically highlighting the Manager Name using Display_Item built-in.

The following code written in Pre-Query trigger of Departments block to filter the records:

if :ctrl.deptno is not null then
 -- set default_where property of the block to the ctrl block item to filter the records before query
 set_block_property('departments', default_where, 'department_id = :ctrl.deptno');
end if;

The following code written in Post-Query trigger of Departments block to populate non-database item fields and dynamically highlighting the Manager Name field:

begin
select first_name, salary into :departments.empname, :departments.sal
  from hr.employees where employee_id = :departments.manager_id;
  -- highlight as per your criteria
  if :sal >= 10000 then
                  -- create highlight visual attribute with color of your choice to highlight
   display_item('departments.empname', 'highlight');
  else
                 -- create default1 visual attribute to restore to normal view
   display_item('departments.empname', 'default1');
  end if;
exception
when others then
  null;
end;

The following code written in When-Button-Pressed trigger of Execute Query push button in Ctrl block to execute query in Departments block:

go_block('departments');
set_block_property('departments', default_where, '');
execute_query;

Subscribe To Get Email Notifications For Latest Updates Like This:
Enter your email address:


Delivered by FeedBurner

Now view blog posts and ebooks easily on your android mobiles with our free Android App. The benefit of using this app rather than opening the site on your mobile is that you can view posts topic wise with the help of Tab Buttons on bottom of the app and use search option to search in whole site for particular topic very efficiently.

Click on the below link image to download the app:

Fox Infotech


Below are the images of our app, please have a look:


  



You can display modal windows in Oracle Forms to display normal messages, error message or asking for confirmation eg. on deleting a record or saving a record etc. using show_alert command.

These modal window messages can be shown using Alert option in Oracle forms.

This is the screen shot below for this example:


You can download this form from the following link: Modal_Msgt.fmb
For this example I have created three alerts with the following names:

1. Good_Msg
2. Error_Msg
3. Ask_Alert

The following code is written for "Show Good Message" button to display a normal message, you can use this code in any PLSQL block:

Declare
-- create a numeric variable to hold show_alert return value
nalertbutton number;
Begin
-- set the message for alert
set_alert_property('good_msg', alert_message_text, 'Records saved successfully.');
-- after below statement the execution will hold till you click on ok.. becuase it is an modal window
nalertbutton := show_alert('good_msg');
:alertblock.result := 'That was a good message.';
-- after this you can perform any task...
End;

The following code is written for "Show Error Message" button to display an Error message:

Declare
-- create a numeric variable to hold show_alert return value
nalertbutton number;
Begin
-- set the message for alert
set_alert_property('error_msg', alert_message_text, 'An error occurred.');
-- after below statement the execution will hold till you click on ok.. becuase it is an modal window
nalertbutton := show_alert('error_msg');
:alertblock.result := 'That was an ERROR message.';
-- after this you can perform any task...
End;

The following code is written for "Ask Confirmation" button to ask for a confirmation:

Declare
-- create a numeric variable to hold show_alert return value
nalertbutton number;
Begin
-- set the message for alert
set_alert_property('ask_alert', alert_message_text, 'Confirm Yes or No?');
-- after below statement the execution will hold till you click on ok.. becuase it is an modal window
nalertbutton := show_alert('ask_alert');
-- now check which button or answer have been choosen
if nalertbutton = alert_button1 then
:alertblock.result := 'You choose Yes.';
else
:alertblock.result := 'You choose No.';
end if;
-- after this you can perform any task...
End;
Subscribe To Get Email Notifications For Latest Updates Like This:
Enter your email address:


Delivered by FeedBurner

See also http://www.foxinfotech.in/2015/02/using-single-alert-for-messages-and-confirmation-messages.html

Get_File_Name is built-in function of Oracle Forms 6i, used to get the file name with address by browsing the file. You can browse a specific extension name file or with multiple extensions using wild cards. 

In this example I am showing three different usage of Get_File_Name function, one is given for to get any Csv file name into a display field, second is given to read image files into an image item and third is for sound item.

Below is the screen shot for this example:


You can also download this form from the following link: GetFileName.fmb

Write the following code on When-Button-Pressed trigger for Browse CSV Files button:

declare
filename varchar2(500);
begin
filename := GET_FILE_NAME(File_Filter=> 'CSV Files
(*.Csv)|*.Csv|');

:block2.txtfile := filename;

end;

Write the following code on When-Button-Pressed trigger for Upload Image button:

declare
filename varchar2(500);
begin
filename := GET_FILE_NAME(File_Filter=> 'Jpg Files
(*.jpg)|*.jpg|Gif Files (*.gif)|*.gif|All Files (*.*)|*.*|');

READ_IMAGE_FILE(filename, 'JPEG', 'block2.image9');
end;

Write the following code on When-Button-Pressed trigger for Browse Wave button:

declare
filename varchar2(500);
begin
filename := GET_FILE_NAME(File_Filter=> 'Wav Files
(*.wav)|*.wav|All Files (*.*)|*.*|');

READ_sound_FILE(filename, 'wave', 'block2.sound_item11');
play_sound('block2.sound_item11');
end;
Like us to get notifications for free source code in future, thanks.

I have written many posts previously on Timers in Oracle Forms like how to change images randomly with timers and how to display a clock using timer, but in this post I am simply describing to how to create a timer, stop a timer, re-start a timer and deleting a timer.

The following is the screen shot for this example showing a progress bar based on a display item:


You can also download this form from the following link Timer.fmb

Create a display item with the following properties:

Name: Prgbar
Width: 5
Bevel: Plain
Background Color: blue

Write the following code for the "Create Timer" button:

When-Button-Pressed trigger
Declare
v_timer timer;
Begin
-- find timer first if already exists.
v_timer := find_timer('PrgBarTmr');
if id_null(v_timer) then
-- Creating timer for one second... one second = 1000 millisecond
v_timer := Create_Timer('PrgBarTmr', 1000, Repeat);
else
message('already exists.');
end if;

-- will handle this timer in form level when-timer-expired trigger
End;

Write the following code for the "Stop Timer" buton:

When-Button-Pressed trigger
Declare
v_timer timer;
Begin
-- find the timer first
v_timer := find_timer('PrgBarTmr');
if not id_null(v_timer) then
-- this will stop the timer after one millisecond
Set_Timer(v_timer, 1, No_Repeat);
end if;
-- will handle this timer in form level when-timer-expired trigger
End;

Write the following code for the "Re-Start Timer" buton:

When-Button-Pressed trigger
Declare
v_timer timer;
Begin
-- find the timer first
v_timer := find_timer('prgbartmr');
if not id_null(v_timer) then
-- this will re-start the timer after one second
Set_Timer(v_timer, 1000, Repeat);
else
v_timer := create_timer('prgbartmr',1000, Repeat);
end if;
-- will handle this timer in form level when-timer-expired trigger
End;

Write the following code for the "Delete Timer" buton:

When-Button-Pressed trigger
Declare
v_timer timer;
Begin
-- find the timer first
v_timer := find_timer('PrgBarTmr');
if not id_null(v_timer) then
-- this will delete the timer
Delete_Timer(v_timer);
end if;
End;

Then finally write the code for When-Timer-Expired trigger at form level to handle the timer and to do specific task:

When-Timer-Expired trigger
Declare
v_timer_name varchar2(30);
v_width number;
Begin
-- get the timer name first.. to know which timer has expired.. if multiple timer are running
  v_timer_name := get_application_property(timer_name);
  -- check if the same timer with capital letters
  if v_timer_name = 'PRGBARTMR' then
  v_width := get_item_property('blKtmr.prgbar', width);
  if v_width < 100 then
   v_width := v_width + 5;
  else
   v_width := 0;
  end if;
  set_item_property('blktmr.prgbar', width, v_width);
end if;

-- will handle this timer in form level when-timer-expired trigger
End;

The example given below for writing text file or CSV using Text_IO package from a tabular block in Oracle Forms. 

Suppose there is a tabular grid data block "Job_History" in your forms and you want to write a CSV on click of a button by reading whole block from top to bottom. The following is the demo screen shot:


You can also download this form from this link Job_History_Csv.fmb.

Write the following When-Button-Pressed trigger code for the "Export To CSV" button:

Declare
out_file text_io.file_type;
v_line varchar2(1000);
begin
out_file := text_io.fopen('C:\job_history.csv', 'w');
go_block('job_history');
-- move control to first record;
first_record;
loop
v_line := :job_history.employee_id||','|| :job_history.start_date||','|| :job_history.end_date ||','||
          :job_history.job_id||','|| :job_history.department_id;
text_io.put_line(out_file, v_line);
-- move control to next record;
if :system.last_record = 'TRUE' then
  exit;
end if;
next_record;
end loop;
text_io.fclose(out_file);
-- again after completion move control to first record
first_record;
end;

Foxinfotech.in Provides free customized softwares, IT ebooks, Oracle Forms & Reports / PLSQL code examples, Blogger tips, SEO, Customized Software Development and Blog development.

Below are the average monthly statistics for foxinfotech.in

Approx 7,000 people visits this site per month
Visits
7,000
Unique Visitors
5,100
Pageviews
14,318
Pages / Visit
2.10
Avg. Visit Duration
00:02:22
Bounce Rate
60.43%
% New Visits
71.26%
Advertisement Price List
Ads Size
Nos. Available
Price
Placing
468x60
1 of 3 available
$20 per month for each
Below top menu bar
350x300
1 of 2 available
$25 per month for each
Side bar
125x125
2 available
$20 per month for each
Side bar
728x90
1 of 1 available
$20 per month for each
Below content


You have a particular set of skill or talent like Cooking, Beauty, Interior Design etc. and you want to do blogging but you don't know how to design a blog and linked to a personal domain then don't worry we will design the blog for you, keeping in mind the niche of your blog.

The blog will have all the features and necessary widgets installed for professional look and feel,what you need to do is just write the posts.

We will design a blog suitable for your niche and will give a domain name like www.yourblog.com, www.yourblog.in etc. with one year free subscription.

The following is the price and contact information:



Suppose you want to populate a non-database data block with records manually in Oracle forms. This task can be done using a cursor.

Below is the example given for hr.job_history table, where user input the employee id in upper block and click on the fetch button to populate the records from hr.job_history table into the lower tabular data block.

The following is the screen shot for this example: (you can also download the form from this link Job_History.fmb)
Follow to get notifications for free source code in future, thanks.

For the employee id field of upper block write the When-Validate-Item trigger code as below:

Begin
Select first_name||' '||last_name into :ctrl.ename from hr.employees
  where employee_id = :ctrl.empid;
exception
when no_data_found then
   message('Employee id does not exists');
   raise form_trigger_failure;
End;


For the Fetch button write the When-Button-Pressed trigger code as below:

Declare
Cursor C_jobs
 is
 Select employee_id, start_date, end_date,
        job_id, department_id
        from hr.job_history
        where employee_id = :ctrl.empid;
Begin
go_block('job_history');
-- first clear the block if it contains any records
clear_block(no_validate);
-- move control to first record;
first_record;
        -- open the cursor and populate the block
for cur in C_jobs loop
:job_history.employee_id := cur.employee_id;
:job_history.start_date := cur.start_date;
:job_history.end_date := cur.end_date;
:job_history.job_id := cur.job_id;
:job_history.department_id := cur.department_id;
-- move control to next record;
next_record;
end loop;
-- again after completion move control to first record
first_record;

End;

See also: If Value exists then query else create new in Oracle Forms

Follow To Get Notifications For Free Source Code

An example given below for Oracle Forms, when a value exists then execute query for that value to display the correspondent record else allow user to create a new record for that value.

The following is the example given for HR schema employee table, in this example user will enter an empoyee id and if the employee id exists it will query the record else allow user to create a new record, the trigger written on key-next-item trigger, you can download the employees.fmb form also from the following link employees.fmb

KEY-NEXT-ITEM trigger code
declare
v_empid employees.employee_id%type;
Begin
 Select employee_id into v_empid
    from hr.employees
    where employee_id = :employees.employee_id;
    -- value exists
    -- set block property and execute query
    clear_block(no_validate);
 
    set_block_property('employees', default_where, 'employee_id = '||v_empid);
    execute_query;
    set_block_property('employees', default_where, '');
    next_item;
exception
when no_data_found then
  -- when not then clear block and allow to add new
  v_empid := :employees.employee_id;
  clear_block(no_validate);
  :employees.employee_id := v_empid;
  next_item;
End;


You are trying to update particular rows in a table in Oracle and the statement taking too much time and after some time you get the error ORA-00054: resource busy and acquire with NOWAIT specified or timeout expired.

After getting this error you identified the problem, to follow Oracle best practices for application development, use the NOWAIT clause and minimize the use of LOCK statements unless the application requires it. When a DML statement runs, the NOWAIT clause returns immediately if there is already a lock on the resource you require for the DML statement.

To avoid the wait during the UPDATE attempt, use the NOWAIT clause in a SELECT before the UPDATE statement in all sessions, as follows:

select * from employees e
where employee_id = 101
for update of salary nowait
;

If another session already has the row locked, you will receive this error message:



Suppose you have a standard for your database that all foreign key columns must have indexes created for them and  you want to verify that all foreign key columns are indexed or not.

The following query will get you the names of foreign key columns for which index have not been created in Oracle:

select
a.constraint_name cons_name
,a.table_name tab_name
,b.column_name cons_column
,nvl(c.column_name,'***No Index***') ind_column
from user_constraints a
join
user_cons_columns b on a.constraint_name = b.constraint_name
left outer join
user_ind_columns c on b.column_name = c.column_name
and b.table_name = c.table_name
where constraint_type = 'R'
order by 2,1;

Sequence of triggers fires on Commit.

1.  KEY Commit
2.  Pre Commit
3.  Pre/On/Post Delete
4.  Pre/On/Post Update
5.  Pre/On/Post Insert
6.  On commit
7.  Post Database Commit

Sequence of triggers fires when Form is opened and closed.

On Open
1.  Pre-Logon
2.  On-Logon      
3.  Post-Logon                        
4.  Pre-Form                          
5.  When-Create-Record              
6.  Pre-Block                          
7.  Pre-Record                        
8.  Pre-Text-Item                      
9.  When-New-Form-Instance    
10. When-New-Block-Instance  
11. When-New-Record-Instance
12. When-New-Item-Instance
On Close
1.  Post-Text-Item                
2.  Post-Record                    
3.  Post-Block                      
4.  Post-Form                        
5.  On-Rollback                  
6.  Pre-Logout                    
7.  On-Logout                      
8.  Post-Logout                  

Sequence of triggers fires when Navigating from one item to another.

1. Key-next
2. Post Change
3. When validate
4. Post text
5. Pre text
6. When new item instance

About The Book

This book is about the ways in which we can extend Oracle E-Business Suite (EBS) and focuses on more recent tools and technology. Its primary focus is to show how we can integrate with EBS, personalize and develop OA Framework pages with EBS, and to show how we can use BI Publisher to create and mail merge documents within EBS. The book has many detailed examples to work through with tips and explanations about how various components can be configured and how we can extend standard functionality and the various ways in which we can do it. It complements my first book, Oracle E-Business Suite R12 Core Development and Extension Cookbook, which focuses on writing concurrent programs, the personalization and development of professional forms, creating workflows, and using common utilities and scripts within EBS.


Download from ebook from the following link Oracle E-Business Suite R12 Integration and OA Framework Development

About The Book

The following chapters covers this book:

Chapter 1
What is Unstructured Data?, covers what a digital object is from first principles. This chapter will provide the reader with new insights into the basics of unstructured data.
Chapter 2
Understanding Digital Objects, answers all the questions generally raised about multimedia objects. This chapter takes the reader through all the different types of smart media currently being used and how they can work with them intelligently.
Chapter 3
The Multimedia Warehouse, discusses all the concepts behind a multimedia warehouse and how it differs from a relational data warehouse, using real life case scenarios.
Chapter 4
Searching the Multimedia Warehouse, continues from the previous chapter. This chapter takes the reader further into the multimedia warehouse architecture and explorers all the issues behind doing simple and complex searches and then how to best display the results.
Chapter 5
Loading Techniques, will help storage and database administrators learn about all the different techniques and database issues involved in loading large numbers of digital objects into a database.
Chapter 6
Delivery Techniques, covers all the concepts behind setting an e-commerce system and delivering digital objects. Learn about copyright management, protection from privacy, price books, business rules, and processing workflows.
Chapter 7
Techniques for Creating a Multimedia Database, will help the Oracle Database Administrators and Developers to learn how to configure an Oracle Database and web server for managing multimedia. They will discover which database parameter and storage configuration settings work and why they work.
Chapter 8
Tuning, will help the Oracle Database administrators learn new concepts, skills, and techniques that are required to manage very large multimedia databases.
Chapter 9
Understanding the Limitations of Oracle Products, gives an overview of all the Oracle products and key features and helps you learn how well each one works with multimedia. Readers will also begin to appreciate what is truly involved in the real configuration and setup of a multimedia based database.
Chapter 10
Working with the Operating System, will help database administrators and developers gain a better understanding of how to extend the Oracle database to work and integrate with open source code. This is generally required to perform additional and complex processing, which is currently beyond the normal bounds of the Oracle Database.

Download from the following link Managing Multimedia and Unstructured Data In Oracle

You have linked your blog or website with your Google+ profile and in search results it is showing your face and your name but not showing number of Google+ in circles details, that how many have you in their circles. you can see in picture below


The problem might be that your circles is less than 20 or something, it will show when your circles increase from at least 20 nos. It will show automatically.

I learnt this from my experience only and I think that this might be only the reason.


Installing and managing a complex enterprise application such as Oracle's Siebel CRM can be challenging. Whether you consider yourself a seasoned IT professional or a beginner: once we add concepts such as load balancing or multiple language deployment, it is easy to get lost. 

The reason why you are reading this book might have been stated above. In this book, we are going to follow a typical Siebel CRM installation procedure. Additionally, we will look under the hood and learn how to manage all those different pieces of software.


Download from the following link Oracle Siebel CRM Installation and Management

An example is given below to stop the execution of a particular DDL command in Oracle Streams. In this example you will learn how to ignore Drop Table command at the target schema in Oracle Streams.

1. Connect to the target database with the streams admin credentials.

conn STRMADMIN/STREAM@TARGET

2. Create a procedure to handle the drop table statement.

create or replace procedure
 IGNORE_DROP_TABLE (in_any IN SYS.ANYDATA
 )

 is
 lcr SYS.LCR$_DDL_RECORD;
 rc PLS_INTEGER;

 begin
 rc := in_any.GETOBJECT(lcr);

 if lcr.GET_COMMAND_TYPE != 'DROP TABLE'
 then
lcr.execute();
 end if;
 END;
 /

3. Alter the Apply process.

 begin
 dbms_apply_adm.alter_apply(
 apply_name => 'STREAMS_APPLY',
 ddl_handler => 'IGNORE_DROP_TABLE');
 end;
 /

Now all DDL statements except "Drop Table" will execute in the target database.


In this post I will describe to how to keep enabled Oracle Streams Propagation service for the target database by creating a Schedule Job and procedure.

The Propagation is service that transfers the new changes from the source database to target database, if this service get stopped then no data changes will apply to the target database. I already explained in my previous post to how to create Oracle Streams Replication.

1. First login into database with Streams admin credentials.

CONNECT [SOURCE_STREAM_ADMIN]

2. Then create the table to maintain the propagation log, so that you can view when the propagation service was stopped and when it get started again.

Create Table Propagation_Audit (
Propagation_name Varchar2(30)
,Source_queue_name Varchar2(30)
,Destination_queue_name Varchar2(30)
,Destination_dblink Varchar2(128)
,Status Varchar2(8)
,Error_message Varchar2(4000)
,Error_date Date
)
/

3. Then create a procedure to log the disable status and re-enabled it.

Create Or Replace PROCEDURE Ckprop_Enable
As
   Errnum   Number;
   Errmsg   Varchar2 (4000);

   CURSOR Prop_status
   Is
      Select Propagation_name, Destination_dblink, Status, Source_queue_name,
             Destination_queue_name, Error_message, Error_date
        From DBA_PROPAGATION
       Where Status != 'ENABLED';
BEGIN
   For Rec In Prop_status
   LOOP
      Insert Into Propagation_Audit
           Values (Rec.Propagation_name, Rec.Source_queue_name, Rec.Destination_queue_name,
                   Rec.Destination_dblink, Rec.Status, Rec.Error_message, Rec.Error_date);

      COMMIT;

      BEGIN
         Dbms_Aqadm.enable_Propagation_Schedule (Rec.Source_queue_name, Rec.Destination_dblink);
      EXCEPTION
         When Others
         Then
            Errnum := SQLCODE;
            Errmsg := SQLERRM;

            Insert Into Propagation_Audit
                 Values ('CKPROP_ENABLE', Rec.Source_queue_name, 're-enable propagation for',
                         Rec.Destination_dblink, 'ERROR', Errnum || ': ' || Errmsg, Sysdate);

            COMMIT;
      END;
   END LOOP;
EXCEPTION
   When Others
   Then
      Errnum := SQLCODE;
      Errmsg := SQLERRM;

      Insert Into Propagation_Audit
           Values ('CKPROP_ENABLE', 'Exception handler', Null, Null, 'ERROR',
                   Errnum || ': ' || Errmsg, Sysdate);

      COMMIT;
END Ckprop_Enable;
/

4. Then create a scheduled job to check at specified interval.

Exec DBMS_SCHEDULER.CREATE_JOB (
job_name => 'propagation_check', 
job_type => 'STORED_PROCEDURE', 
job_action => 'ckprop_enable', 
number_of_arguments => 0, 
start_date =>Sysdate, 
repeat_interval => 'FREQ=MINUTELY;INTERVAL=5', 
end_date => Null, 
enabled => TRUE, 
auto_drop=>FALSE, 
comments => 'EVERY 15 MIN');

Its done.




This book focuses on database metadata (data about data) or annotation-based code recipes for JDBC API for use with Oracle and MySQL. The book provides complete and working solution for performing database metadata tasks using JDBC. You can cut and paste solutions from this book to build your own database metadata applications. All the solutions have been compiled and tested against two leading databases: MySQL and Oracle. This book is ideal for anyone who knows some Java (can read/write basic Java programs) and some JDBC (can read/write basic queries using JDBC and SQL) and wants to learn more about database and result set metadata. Each section of this book is a complete recipe (including the database setup, the solution, and the solutions for both MySQL and Oracle), so you can use the code directly in your projects (although sometimes you may need to cut and paste only the sections you need). You may adopt my solutions to other databases (such as Microsoft SQLServer, DB2, PostgreSQL) by just changing the database parameters (such as the driver, database URL, or database username/password).


Download from the following link JDBC Metadata Mysql and Oracle Recipes


About The Book

Secrets of the ORACLE Database brings together a wealth of information on undocumented as well as incompletely documented features of the ORACLE database management system (DBMS). It has been my goal to combine many of the hidden features of the ORACLE database server into a single source. You will be hard-pressed to find the same density of material on advanced, undocumented topics in another book. Certain topics addressed may also be found in articles on the Internet, but I have striven to provide more background information and indepth examples than are usually available on the Internet. The book also contains a significant amount of original material, such as the inclusion of think time in resource profiles for performance diagnosis, an emergency procedure for the conversion of a RAC installation to a single instance installation, as well as the integration of Statspack, Active Workload Repository, and Active Session History with SQL trace.


Download from the following link Secrets of Oracle Database

About The Book

The Oracle E-Business Suite is like a machine that requires constant maintenance and fine-tuning. With  experience comes the knowledge of how to tweak the parts and use the tools to make it run properly. Even for the experienced administrator, Oracle Applications is complicated to administer—let’s be honest, at times it can be a real headache. Making this task even more difficult is the need to search through numerous MetaLink notes and references, Oracle’s online Electronic Technical Reference Manuals (eTRMs), and other published works for the how-to of daily tasks. As with most trades, there are hidden secrets that are uncovered only through experience or trial and error.



Download free from the following link Oracle Applications DBA Field Guide


About The Book

This section provides an initial introduction to the Oracle SOA Suite and its various components, and gives the reader a fast paced hands-on introduction to each of the key components in turn.

Service-Oriented Architecture (SOA) may consist of many interconnected components. As a result of this, the Oracle SOA Suite is a large piece of software that initially seems to be overwhelmingly complex. In this chapter, we will provide a roadmap for your understanding of the SOA Suite and provide a reference architecture to help you understand how to apply SOA principles with the SOA Suite.



V. Kapoor

{picture#https://3.bp.blogspot.com/-q3wCssWUHo8/ViDFfCpPEuI/AAAAAAAAD0M/MHPvgnl3T3U/s1600/authpic.JPG} Vinish Kapoor is a Software Consultant, currently working in a reputed IT company in Noida, India and doing blogging on Oracle Forms, SQL and PLSQL topics. He is an author of an eBook Oracle Forms Recipes, which is available on Google play. {facebook#https://www.facebook.com/foxinfotech2014} {twitter#https://twitter.com/foxinfotech} {google#https://plus.google.com/u/0/+VKapoor/posts}
Fox Infotech. Powered by Blogger.