sp_helpdb function returns information about that databases in the particular database server. Below is an example:
Friday, August 23, 2013
Monday, August 5, 2013
SP_EXECUTESQL expects NTEXT/NCHAR/NVARCHAR
Procedure expects parameter '@statement' of type 'ntext/nchar/nvarchar'.
Pretty straight forward error, just change the datatype of the variable you are using to assign the dynamically generated string.
Hope this helps....
Pretty straight forward error, just change the datatype of the variable you are using to assign the dynamically generated string.
Hope this helps....
Monday, June 10, 2013
PL/SQL Collections
This is one of those topics i used to dread when i started out as a database developer, not anymore. But still from time to time i need to refresh my memory when it comes to collections:
I recently started reading a book "Oracle PL/SQL Tuning: Expert Secrets for High Performance Programming" and it describes collections in such a way that i have to make a post of it. It is precise, with an example and perfect read for me:
Below are a few pointers that i usually like to remember:
Associative Arrays (TABLE OF)
Nested Tables (TABLE OF)
VARRAYS (VARRAY OF)
I recently started reading a book "Oracle PL/SQL Tuning: Expert Secrets for High Performance Programming" and it describes collections in such a way that i have to make a post of it. It is precise, with an example and perfect read for me:
Below are a few pointers that i usually like to remember:
Associative Arrays (TABLE OF)
- AKA Index by tables
- Of course use an index by BINARY_INTEGER or PLS_INTEGER or VARCHAR2
- Sparse collection
- Need not be consecutive
- Unbounded - no upper boundary
- Collection is extended by assigning values to non existing index values
- Data can be deleted
- Start with FIRST method to access data
Nested Tables (TABLE OF)
- No index
- Unbounded colleciton
- Dense collection when creating collection
- Data can be deleted
- NEXT and PRIOR (?) helps access collection elements
VARRAYS (VARRAY OF)
- No index
- Bounded collection so cannot be extended above the specified limit
- Data cannot be deleted
- Dense data collection
- Consecutive data
- Start with FIRST method to access data
Methods that can be used with collections. Not all methods can be used with all collections:
- EXISTS - exists(v) - returns boolean
- DELETE - delete, delete(v1) and delete(v1,v8) - removes data
- COUNT - returns number
- TRIM - trim and trim (v) - removes data
- LIMIT - returns number
- EXTEND - extend, extend(v1) and extend(v1,v8) - adds NULL elements
- FIRST - returns index of first element
- LAST - returns index of last element
- PRIOR - prior(v) - returns index of prior element
- NEXT - next(v) - returns index of next element
Hope this helps....
Friday, June 7, 2013
Quick Tip #4
To see what SQL a session is running in the database, find the SPID for that user using sp_who2 and then pass it as an input to the dbcc command.
sp_who2
dbcc inputbuffer (:SPID)
sp_who2
dbcc inputbuffer (:SPID)
Thursday, June 6, 2013
NULL SELF Argument Is Disallowed - Oracle
ORA-30625: method dispatch on NULL SELF argument is disallowed
Cause: A member method of a type is being invoked with a NULL SELF argument.
Action: Change the method invocation to pass in a valid self argument.
Well i was trying to parse an XML with multiple namespaces and was using EXISTSNODE function. When traversing between nodes and subnodes i forgot to remove a subnode name and the XPATH formed was incorrect:
l_xmltype := xmltype (l_doc) ;
l_index := 1;
v_count := l_xmltype.existsnode (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo/subscriptionKey/subscriptionInfo [' || to_char (l_index
) || ']', v_namespaces);
dbms_output.put_line ('------' || v_count);
--
WHILE l_xmltype.existsnode (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo [' || TO_CHAR (l_index
) || ']', v_namespaces) > 0
LOOP
l_value := l_xmltype.extract (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo [' || to_char (
l_index) || ']/duration/text()', v_namespaces) .getstringval () ;
dbms_output.put_line ('-------------> ' || l_value) ;
--
l_index := l_index + 1;
END LOOP;
This error is same as the evil NULL POINTER EXCEPTION in JAVA....
Just correcting the subnode path (remove subscriptionInfo from EXISTSNODE) to represent right structure helped resolve this problem.
Many thanks to A_Non On XML for his detailed explanation and examples on this blog about XML parsing. I hope he does not mind a well deserved praise.
Cause: A member method of a type is being invoked with a NULL SELF argument.
Action: Change the method invocation to pass in a valid self argument.
Well i was trying to parse an XML with multiple namespaces and was using EXISTSNODE function. When traversing between nodes and subnodes i forgot to remove a subnode name and the XPATH formed was incorrect:
l_xmltype := xmltype (l_doc) ;
l_index := 1;
v_count := l_xmltype.existsnode (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo/subscriptionKey/subscriptionInfo [' || to_char (l_index
) || ']', v_namespaces);
dbms_output.put_line ('------' || v_count);
--
WHILE l_xmltype.existsnode (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo [' || TO_CHAR (l_index
) || ']', v_namespaces) > 0
LOOP
l_value := l_xmltype.extract (
'ns1:NewSubscriptionNotificationRequest/subscriptionInfo [' || to_char (
l_index) || ']/duration/text()', v_namespaces) .getstringval () ;
dbms_output.put_line ('-------------> ' || l_value) ;
--
l_index := l_index + 1;
END LOOP;
This error is same as the evil NULL POINTER EXCEPTION in JAVA....
Just correcting the subnode path (remove subscriptionInfo from EXISTSNODE) to represent right structure helped resolve this problem.
Many thanks to A_Non On XML for his detailed explanation and examples on this blog about XML parsing. I hope he does not mind a well deserved praise.
Wednesday, May 22, 2013
PLSCOPE_SETTINGS in Oracle
Today i was working on an object creation script and had a trigger for audit columns like date inserted, date updated etc...
I constantly kept getting the error below and on further research found out a workaround from one of the blogs (thank you fellow blogger):
Error report:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [kqlidchg0], [], [], [], [], [], [], [], [], [], [], []
ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_PLSCOPE_SIG_IDENTIFIER$) violated
00603. 00000 - "ORACLE server session terminated by fatal error"
*Cause: An ORACLE server session is in an unrecoverable state.
*Action: Login to ORACLE again so a new server session will be created
Failed to resolve object details
Workaround: ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:NONE';
By default the value is IDENTIFIERS:ALL
The database default value is NONE and later found out it was SQL Developer setting.
After altering the session the trigger was compiled without any problems....hope this
helps.
Google is my friend :)
I constantly kept getting the error below and on further research found out a workaround from one of the blogs (thank you fellow blogger):
Error report:
ORA-00603: ORACLE server session terminated by fatal error
ORA-00600: internal error code, arguments: [kqlidchg0], [], [], [], [], [], [], [], [], [], [], []
ORA-00604: error occurred at recursive SQL level 1
ORA-00001: unique constraint (SYS.I_PLSCOPE_SIG_IDENTIFIER$) violated
00603. 00000 - "ORACLE server session terminated by fatal error"
*Cause: An ORACLE server session is in an unrecoverable state.
*Action: Login to ORACLE again so a new server session will be created
Failed to resolve object details
Workaround: ALTER SESSION SET PLSCOPE_SETTINGS = 'IDENTIFIERS:NONE';
By default the value is IDENTIFIERS:ALL
The database default value is NONE and later found out it was SQL Developer setting.
After altering the session the trigger was compiled without any problems....hope this
helps.
| PL/SQL Compiler Setting in SQL Developer |
Google is my friend :)
SYS_CONTEXT in Oracle
I know there is a functions to get user environment details in Oracle along with other valuable information for auditing purposes in your application. But i always tend to forget it, not anymore
SYS_CONTEXT (NAMESPACE, PARAMETER) <<<< LOOK MA I AM PINK
Example: select sys_context('USERENV', 'HOST') from dual;
SYS_CONTEXT (NAMESPACE, PARAMETER) <<<< LOOK MA I AM PINK
Example: select sys_context('USERENV', 'HOST') from dual;
Tuesday, May 7, 2013
SET DEADLOCK_PRIORITY HIGH
Incase you are expecting a DEADLOCK in an environment where your process/job is going to run executing DML statements and you are fully aware that the process take priority over all other processes/jobs, you can set its priority to HIGH.
This specifies the rank/priority of your process higher than any other process when deadlock is detected.
Deadlock priority is set before the TRY block in the procedure.
Hope this helps....
This specifies the rank/priority of your process higher than any other process when deadlock is detected.
Deadlock priority is set before the TRY block in the procedure.
Hope this helps....
Subscribe to:
Posts (Atom)