Progress
DataServer
for ORACLE Guide
Unsupported 4GL Statements
The DataServer supplies you with the complete functionality of Progress when accessing ORACLE databases. Nearly all 4GL language elements (statements, functions, etc.) and Progress Data Dictionary features work the same whether your application accesses an ORACLE database through the DataServer or a Progress database. You can use the DBRESTRICTIONS function to find out which Progress features that your non-Progress databases, or specific tables in those databases, do not support.
For the DataServer for ORACLE, DBRESTRICTIONS can return RECID, PREV, LAST, SETUSERID, SET-CURRENT-VALUE. If you connected to the logical database in read-only mode, the function returns READ-ONLY for the schema holder connection, not for the connection to the ORACLE database. You can specify -RO in the connection to ORACLE; in that case, the function returns READ-ONLY for the ORACLE database as well. See the DBRESTRICTIONS function reference entry in the Progress Language Reference for information on syntax.
Table 2–10 lists the 4GL statements and functions that the DataServer for ORACLE does not support.
Table 2–10: Progress and ORACLE Differences Feature Description BEGINS function
Abbreviated Index
USING option When you use these 4GL elements to access data in an ORACLE database, you will have different results than you would expect from Progress in the following case. If you have a customer named SI and one named SIM and you issue this FIND statement,
FIND customer WHERE name BEGINS "SI".
Progress returns the customer named SI; with the DataServer, the find fails because it is considered ambiguous. You receive the same results when you use an abbreviated index or the USING option in your query. BEGINS operator
MATCHES function To resolve BEGINS or MATCHES comparisons, ORACLE does not use an index as Progress does. Instead, it might do a complete table scan. The table scan typically occurs when the ORACLE DBMS does not know the value of the pattern when the SQL is compiled. See the "Query Tuning" section for information on using the NO-BIND option to handle this situation.
Do not use the MATCHES or BEGINS function with a pattern that is not an expression, but is stored in the ORACLE database. Although theoretically possible with Progress, using this kind of criteria results in poor performance with a Progress database. CONTAINS operator This option relates to word-indexing, which the DataServer does not support. It returns a compilation error. COUNT-OF function The DataServer does not support this function. CREATE statement Records you create after a cursor was opened might be invisible to that cursor. ORACLE maintains a view of a database’s state at the time when the user opens a cursor. Changes you make to a database after opening a cursor might not be visible. CURRENT-VALUE function You can use CURRENT-VALUE only after you have successfully called the NEXT-VALUE function. CURRENT-VALUE statement The DataServer for ORACLE does not support setting a sequence generator’s current value. DBTASKID function The DataServer for ORACLE does not support this function. FIND statements
QUERY option To reduce the number of records ORACLE includes in the results set, you should qualify your FIND statements and queries with a WHERE clause. This achieves a performance rate that is closer to Progress performance. For better performance, use the DEFINE QUERY statement instead of FIND.
To control the order of the results, include the USE-INDEX or BY options in your queries. MATCHES function If you want to use the MATCHES function for a string containing double-byte characters, you must fill out the character expression with periods (.). For example, where J is a double-byte character, the following statement does not find a match:
FIND FIRST Customer WHERE Name MATCHES “J.”
Add periods to search the entire field. For a field that is defined as 20 bytes long, to adjust the example, include seventeen periods after the single double-byte character, J. OPEN QUERY statement Newly created records might not appear in the results set of queries that you opened before you created the records. Reopen the query to access the new records. INDEXED REPOSITION clause Index reposition may cause new SQL to be executed thereby causing newly created records to appear. SESSION: TIME-SOURCE handle This system handle returns the ORACLE server’s time information. SETUSERID function You cannot use this function to change the user ID and password of an ORACLE login. SHARE-LOCK option You cannot use this option for a query with the FIELDS option. SHARE-LOCK is NO-LOCK for ORACLE. Time in the WHERE clause Progress supports this option only if you have mapped ORACLE DATE columns to Progress CHARACTER fields in the schema image. USERID function For a connection to an ORACLE database, the USERID function returns the value that you specified for the -U parameter. For example, if you specify -U bob/password, USERID returns bob/password.
Copyright © 2004 Progress Software Corporation www.progress.com Voice: (781) 280-4000 Fax: (781) 280-4095 |