![]() | |
![]() |
| | Thread Tools | Display Modes |
#1
| |||
| |||
|
#2
| |||
| |||
|
|
"obakesan" <cjundieseastwd (AT) powerup (DOT) com.au> wrote in message news:bg59d2$i11$1 (AT) kraken (DOT) itc.gu.edu.au... HiYa I'm getting an error on executing a procedure across a database link. This program encounted the following error: ORA-02064: distributed operation not supported I don't understand my mistake. I've got 2 databases, in one database I've got the procedure create or replace procedure dump(result out varchar2, perror out number) is begin perror := 1; execute immediate 'truncate table BILLY'; exception WHEN OTHERS THEN result := 'This program encounted the following error: '; result := result || SQLERRM; -- rollback; perror := -1; end dump; then on the other database I have create or replace procedure testa(result out varchar2, errorValue out number) is begin sis_dump@oldcas(result,errorValue); end testa; begin -- Call the procedure testa(result => :result, errorvalue => :errorvalue); end; it just won't work with that execute immediate in it .... any thoughts? thanks See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply Chris You haven't stated which Oracle Version you are running. |
|
In Oracle 8i and I believe in 9i it is illegal to execute "COMMIT" remotely. As a DDL statement, there is an implicit commit in 'truncate table BILLY'. 2 suggestions : You could submit a job to do this and wait for it to complete/error. You could issue a 'delete *'. |
|
Maybe somebody else has a better suggestion. |
#3
| |||
| |||
|
|
HiYa I'm getting an error on executing a procedure across a database link. This program encounted the following error: ORA-02064: distributed operation not supported I don't understand my mistake. I've got 2 databases, in one database I've got the procedure create or replace procedure dump(result out varchar2, perror out number) is begin perror := 1; execute immediate 'truncate table BILLY'; exception WHEN OTHERS THEN result := 'This program encounted the following error: '; result := result || SQLERRM; -- rollback; perror := -1; end dump; then on the other database I have create or replace procedure testa(result out varchar2, errorValue out number) is begin sis_dump@oldcas(result,errorValue); end testa; begin -- Call the procedure testa(result => :result, errorvalue => :errorvalue); end; it just won't work with that execute immediate in it .... any thoughts? thanks See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply |
#4
| |||
| |||
|
|
HiYa further information to my problem is that it seems that the problem is related to having out parameters in a procedure (or return values in a function) seems odd that I can do it, with a procedure that returns nothing to the RPC caller, but just goes off and does it. I did notice that it propagates exceptions back up the line, but I'm not sure how to manage these, and if I can or can not "raise" an exception at the other server end. anyone? In article <bg59d2$i11$1 (AT) kraken (DOT) itc.gu.edu.au>, cjundieseastwd (AT) powerup (DOT) com.au (obakesan) wrote: HiYa I'm getting an error on executing a procedure across a database link. This program encounted the following error: ORA-02064: distributed operation not supported I don't understand my mistake. I've got 2 databases, in one database I've got the procedure create or replace procedure dump(result out varchar2, perror out number) is begin perror := 1; execute immediate 'truncate table BILLY'; exception WHEN OTHERS THEN result := 'This program encounted the following error: '; result := result || SQLERRM; -- rollback; perror := -1; end dump; then on the other database I have create or replace procedure testa(result out varchar2, errorValue out number) is begin sis_dump@oldcas(result,errorValue); end testa; begin -- Call the procedure testa(result => :result, errorvalue => :errorvalue); end; it just won't work with that execute immediate in it .... any thoughts? thanks See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply |
#5
| |||
| |||
|
|
You were right. 'Commit', expicit or implicit, can not be used in a remote procedure that contains 'OUT' parameters - or functions that |
|
return values for that matter. As long as you avoid the combination of these two, anything practical you can think of should work. You can try creating a error logging temp table in the remote db to capture possible error messages, or move the exception handling to the calling routine. |
| - Jusung Yang cjundieseastwd (AT) powerup (DOT) com.au (obakesan) wrote in message news:<bg7jgv$6pb$1 (AT) kraken (DOT) itc.gu.edu.au>... HiYa further information to my problem is that it seems that the problem is related to having out parameters in a procedure (or return values in a function) seems odd that I can do it, with a procedure that returns nothing to the RPC caller, but just goes off and does it. I did notice that it propagates exceptions back up the line, but I'm not sure how to manage these, and if I can or can not "raise" an exception at the other server end. anyone? In article <bg59d2$i11$1 (AT) kraken (DOT) itc.gu.edu.au>, cjundieseastwd (AT) powerup (DOT) com.au (obakesan) wrote: HiYa I'm getting an error on executing a procedure across a database link. This program encounted the following error: ORA-02064: distributed operation not supported I don't understand my mistake. I've got 2 databases, in one database I've got the procedure create or replace procedure dump(result out varchar2, perror out number) is begin perror := 1; execute immediate 'truncate table BILLY'; exception WHEN OTHERS THEN result := 'This program encounted the following error: '; result := result || SQLERRM; -- rollback; perror := -1; end dump; then on the other database I have create or replace procedure testa(result out varchar2, errorValue out number) is begin sis_dump@oldcas(result,errorValue); end testa; begin -- Call the procedure testa(result => :result, errorvalue => :errorvalue); end; it just won't work with that execute immediate in it .... any thoughts? thanks See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply See Ya (when bandwidth gets better ;-) Chris Eastwood we tend to blame others for our problems I think this is something we inherit from our parents please remove undies for reply |
![]() |
| Thread Tools | |
| Display Modes | |
| |