This section provides information about the Microsoft SQL Server and Sybase Adaptive Server constructs and equivalent Oracle constructs generated by the Migration Workbench. It is recommended that you just use one result set, that is, one cursor variable per procedure, if possible. This prevents a direct conversion from T/SQL transaction-handling statements to PL/SQL transaction-handling statements. The following example procedure sends the data out as a result set. The Migration Workbench automatically adds what is necessary to simulate Microsoft SQL Server and Sybase Adaptive Server functionality. Microsoft SQL Server and Sybase Adaptive Server use another method known as result sets to transfer the data from the server to client. The RETURN statement can return only integer values. You can see what the output of the procedure is by looking at the procedure definition. The built-in RAISE_APPLICATION_ERROR procedure rolls back to this SAVEPOINT or the last committed transaction within the procedure. An implicit COMMIT statement is issued before and after each DDL statement. Stored procedures provide a powerful way to code the application logic that can be stored with the server. Make sure that the functionality remains the same, as the transaction models may differ in Microsoft SQL Server and Sybase Adaptive Server and Oracle. The tables are divided into the following four sections. Microsoft SQL Server and Sybase Adaptive Server allow DDL constructs to be part of the stored procedures. The number of rows affected by the most recently executed T/SQL statement. Microsoft SQL Server and Sybase Adaptive Server and Oracle follow similar rules for declaring local variables. If you drop the body and specification of the package, Oracle invalidates any local objects that depend on the package specification. The BODY option drops only the body of the package. Isolation level 3 prevents phantoms. The following DDL statements are ignored by the Migration Workbench. The server error code indicating the execution status of the most recently executed PL/SQL statement. If the Microsoft SQL Server and Sybase Adaptive Server application implements ANSI-standard chained (implicit) transactions with isolation level 3, the application migrates smoothly to Oracle because Oracle implements the ANSI-standard implicit transaction model, which ensures repeatable reads. The built-in RAISE_APPLICATION_ERROR procedure notifies the client of the server error condition and returns immediately to the calling routine. A transaction ends with a COMMIT, ROLLBACK, or disconnection from the database. This requires recompilation of the package and any objects that depend on its specification. Because the Migration Workbench is a single-pass parser, it adds a label statement at the very beginning of every WHILE loop (see Example 2 in Table 3-23 above). To send even a single row back to the client from the stored procedure, Microsoft SQL Server and Sybase Adaptive Server can use result sets instead of an ANSI-standard method. Oracle has three different kinds of stored subprograms, namely functions, stored procedures, and packages. The logical transaction ends with a corresponding COMMIT TRANSACTION (or COMMIT TRAN) or ROLLBACK TRANSACTION (or ROLLBACK TRAN) statement. Functions can return an atomic value to the calling routine using the RETURN statement. In the absence of these keywords the parameter is assumed to be IN. It does not revert to a previous setting due to ROLLBACKS or other transactions.
No manual changes are required. In a PL/SQL procedure, a RETURN statement can only return the control back to the calling program without returning any data. If @@tranchained returns 1, the TL/SQL procedure is in chained, or implicit transaction mode. Many Microsoft SQL Server and Sybase Adaptive Server applications rely on the SQL Server-specific stream-based data return method called "result sets". In general, the Migration Workbench deals with the Microsoft SQL Server and Sybase Adaptive Server T/SQL constructs in one of the following ways: An Microsoft SQL Server and Sybase Adaptive Server stored procedure can be converted to a stored procedure, a function, or a package in Oracle. Cursors allow row-by-row operations on a given result set. However, it can be difficult to track all the result sets in a single procedure. This block must deal with all possible exceptions for that SQL statement. The status information resulting from the last FETCH statements. Output variables allow the caller to see the results in a predictable manner, as the structure of the output variable is predefined. The calling program performs the FETCHs from the cursor, including the possibility of using ARRAY FETCH to retrieve multiple rows in one network message, and closes the cursor when it is done. The value returned by SQLCODE should only be assigned within an exception block; otherwise, it returns a value of zero. Explicit recompilation eliminates the need for implicit recompilation and prevents associated runtime compilation errors and performance overhead. In Oracle it is PL/SQL and in Microsoft SQL Server and Sybase Adaptive Server it is Transact SQL (T/SQL). The transaction is committed with a COMMIT TRANSACTION or rolled back with a ROLLBACK TRANSACTION statement. The named and unnamed inner COMMIT TRANSACTION statements have no effect. CREATE PACKAGE sets up the specification for a PL/SQL package which can be a group of procedures, functions, exception, variables, constants, and cursors. Microsoft SQL Server and Sybase Adaptive Server allow INSERT, UPDATE, and DELETE triggers. Some tables are followed by a recommendations section that contains important information about conversion implications. If many procedures use the same temp table in the same session, SEQUENCE can be used to make sure that the rows are unique to a particular session_id/SEQUENCE combination. The inner ROLLBACK TRANSACTION statements without the name roll back the statements to the outermost BEGIN TRANSACTION statement and the current transaction is canceled. The BEGIN and END keywords enclose the body of the procedure. Therefore, the best design decision is to use stored procedures for data processing and SELECT statements for queries. For example, Microsoft SQL Server and Sybase Adaptive Server constructs such as the following are SQL Server-specific, and cannot be converted to Oracle without manual intervention: The manual intervention required to convert statements such as this can be seen in the following examples: All the ANSI-standard SQL statements can be converted from one database to another using automatic conversion utilities. Microsoft SQL Server and Sybase Adaptive Server stored procedures can return data to the client by means of a Result Set. To create a procedure in your own schema, you must have the CREATE PROCEDURE system privilege.
This is the external or public part of the package. The BEGIN and END keywords that enclose the stored procedure body are optional; all the procedural statements contained in the file after AS are considered part of the stored procedure if BEGIN and END are not used to mark blocks. Oracle is optimized to return data more efficiently when the data is requested using an ANSI-standard SQL SELECT statement, as compared to any proprietary stored procedure method. schema. In Oracle, each SQL statement is automatically checked for errors before proceeding with the next statement. In the absence of these keywords, the parameter is assumed to be the "IN" parameter. However, the CONTINUE within a WHILE loop in Microsoft SQL Server and Sybase Adaptive Server does not have a direct equivalent in PL/SQL. Use the subquery in the SET clause if columns are being updated to values coming from a different table. However, there are cases where you need to use database-specific SQL constructs, mostly for ease of use, simplicity of coding, and performance enhancement. In the following example, an Microsoft SQL Server and Sybase Adaptive Server stored procedure returns a result set with multiple rows: This procedure sends all the qualifying rows to the client as a continuous data stream. As a standard, a RETURN statement must appear after the RAISERROR statement in Microsoft SQL Server and Sybase Adaptive Server, so that it can be converted to the Oracle RAISE_APPLICATION_ERROR statement. PL/SQL does not allow this type of GROUP BY clause. Isolation level 3 is required by ANSI standards. Standard routines can be written to add the error message to the table and retrieve it whenever necessary. It denotes both the set of rows and a current row in that set. You should have the EXECUTE privilege on the function to execute the named function. The logical transaction is always defined by client users, and they should control it.
This is a very powerful concept. The above statement does not have any effect on the conversion process. A logical transaction has to be explicitly started with the statement BEGIN TRANSACTION. In a case where a third-party user interface product uses the result set capability of Microsoft SQL Server and Sybase Adaptive Server, consult with the vendor to make sure that the same functionality is available for the Oracle database. Microsoft SQL Server and Sybase Adaptive Server triggers are executed once per triggering SQL statement (such as INSERT, UPDATE, or DELETE). IF statements in Microsoft SQL Server and Sybase Adaptive Server and Oracle are nearly the same except in the following two cases: If EXISTS() in Microsoft SQL Server and Sybase Adaptive Server does not have an equivalent PL/SQL construct. The primary key must belong to type BINARY_INTEGER. Oracle has a rich set of triggers. As combinations, there are four different types of triggers in Oracle: It is sometimes necessary to create a ROW trigger or a STATEMENT trigger to achieve the same functionality as the Microsoft SQL Server and Sybase Adaptive Server trigger. CREATE PACKAGE creates the body of a stored package. 2022 C# Corner. The Oracle RAISE_APPLICATION_ERROR statement allows the user to customize the error message. The final Oracle package should be as follows: The client should call the TEST_PROC_PKG.PROC1 procedure before repeatedly calling the TEST_PROC.PKG.TEXT_PROC function in order to achieve functionality similar to the source T/SQL procedure. There is a difference; since it is a PL/SQL variable, it can be passed into and out of procedures like any other PL/SQL variable. The GOTO
The actual_parameter is defined in the local block which calls the procedure supplying the value of the actual parameter for the respective formal parameter. You cannot use the ALTER PROCEDURE or ALTER FUNCTION commands to individually recompile a procedure or function that is part of a package. The Migration Workbench overrides the scope rule for variable declarations. Oracle stores triggers and stored subprograms with the server. For example, consider the following procedure: This procedure returns two different result sets. You can customize error messages with the help of a user-defined table. The procedures in the Oracle column are the direct output of the Migration Workbench. Microsoft SQL Server and Sybase Adaptive Server allow you to customize the error messages using a system table. schema. The two PL/SQL blocks in the function are executed with each call to the function. The package must be in the user's schema or the user must have the ALTER ANY PROCEDURE privilege to use this command. These options can be set or un-set using the SET command. There are two ways to convert UPDATE with a FROM statements, and these are illustrated below. Therefore, it is converted to a SELECT INTOWHERE clause, as shown in Example 4 above. Functions and procedures of the package can share data through variables, constants, and cursors. Consider the following code in an Microsoft SQL Server and Sybase Adaptive Server stored procedure: In this code example, if the first SELECT statement does not return any rows, the value of @x could be UNDEFINED. You must remove the DDL statements from the T/SQL source to convert the T/SQL procedure to PL/SQL using the Migration Workbench. The @@error variable has a direct equivalent in Oracle, and that is the SQLCODE function. The statements appear commented in the output with a message "statement ignored. The following table compares Microsoft SQL Server and Sybase Adaptive Server to Oracle transaction-handling statements: At the time of conversion, the Migration Workbench cannot determine the nest level of the current transaction-handling statement. is the schema containing the package. For example, consider the following T/SQL statement: Convert this statement to the following PL/SQL statement in Oracle : Use the subquery in the WHERE clause for all other UPDATEFROM statements. The following SET command sets the implicit transaction mode: The following SET command sets the isolation level to the desired level: isolation level 1 prevents dirty reads. This section discusses the following T/SQL and PL/SQL language elements: Microsoft SQL Server and Sybase Adaptive Server. To create a package in another user's schema, you must have the CREATE ANY PROCEDURE privilege. Not all those variables are listed here. This chapter includes the following sections: Microsoft SQL Server and Sybase Adaptive Server store triggers and stored procedures with the server. The DELETED table holds the before image of the rows that are undergoing change because of the INSERT/UPDATE/DELETE operation, and the INSERTED table holds the after image of these rows. The following global variables are particularly useful in the conversion process: The server error code indicating the execution status of the most recently executed T/SQL statement. This variable contains the number of rows affected by the execution of the SQL statement attached to the implicit cursor. Oracle implements ANSI-standard implicit transactions. schema. In Microsoft SQL Server and Sybase Adaptive Server, transactions are explicit. You can also specify the number of times that the trigger action is to be executed. Considerable differences can be found in the following areas discussed in this section: This section also considers various components of typical Microsoft SQL Server and Sybase Adaptive Server stored procedures and suggests ways to design them in order to avoid conversion problems. T/SQL is the Microsoft SQL Server and Sybase Adaptive Server procedural SQL language and PL/SQL is the Oracle procedural SQL language. This section provides the following tables for the schema object Package Body: This is the internal or private part of the package. Oracle allows you to define a cursor variable to return query results. To further process the rows, the client program must retrieve the rows one after another from the communication channel. In Example 1, the procedure returns a single row result set to the client which is converted to a PL/SQL procedure that returns a single row using the output parameters.
The RETURN statement can return value of any data type. Explicit recompilation eliminates the need for implicit recompilation and prevents associated runtime compilation errors and performance overhead. See the Data Manipulation Language section in Chapter 2 for a discussion of built-in functions in Microsoft SQL Server and Sybase Adaptive Server and Oracle. Procedures that become invalid for some reason should be recompiled explicitly using this command. This could be confusing as the inner COMMIT TRANSACTION does not actually commit. If an error occurs, control immediately jumps to an exception handler if one exists. If you have more than one open transaction, you need to ROLLBACK, then COMMIT. This strategy should work because the logical transactions are almost always designed by the user and should be controlled by the user. If the trigger fails, the operation is rolled back. You can migrate Microsoft SQL Server and Sybase Adaptive Server stored procedures to the Oracle PL/SQL stored procedures or packages in different ways, as follows: Examples of these different Oracle solutions to the result set problem are presented below: The following SELECT statement becomes part of the client code: The following PL/SQL code shows how to migrate the make_loginid procedure to Oracle by using PL/SQL tables as output parameters: The package body definition is as follows: This procedure updates the PL/SQL tables with the data.