We help IT Professionals succeed at work.

help converting sql server procedure to oracle sql developer syntax

itortu
itortu asked
on
Medium Priority
609 Views
Last Modified: 2013-12-07
can anyone help me to convert the ms sql server syntax to oracle sql developer 1.2.1 syntax?

thank you so much.
CREATE PROCEDURE usp_GetFullPath
   @SelectedID  AS INT,
   @FullPath    AS VarCHar(4000) OUTPUT
AS
BEGIN
 
   SET NOCOUNT ON;
 
   DECLARE  @ParentID AS INT;
 
   SET @ParentID = @SelectedID;
   SET @FullPath = '';
 
   WHILE (@ParentID IS NOT NULL) DO
   BEGIN
   
      SELECT  @FullPath = dcollectionname + @FullPath,
              @ParentID = @dparentcollectionid 
      FROM    collections 
      WHERE dparentcollectionid = (@ParentID;
 
   END
 
   SET NOCOUNT OFF;
 
   RETURN;
END

Open in new window

Comment
Watch Question

Top Expert 2009

Commented:
It might help to provide the table structure from COLLECTIONS
Guy Hengel [angelIII / a3]Billing Engineer
CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2009
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION
Top Expert 2009

Commented:
a3, I must have missed a previous question, I do not see collectionid anywhere. Your version makes sense, but the original did not, I was about to suggest not using a loop at all, but I think I see the reasoning.



Author

Commented:
table structure
DCOLLECTIONID	NUMBER	No		1	1	
DCOLLECTIONGUID	VARCHAR2(36 BYTE)	No		2		
DPARENTCOLLECTIONID	NUMBER	Yes		3		
DCOLLECTIONNAME	VARCHAR2(255 BYTE)	No		4		
DCOLLECTIONTYPE	NUMBER	No		5		
DCOLLECTIONMARK	VARCHAR2(255 BYTE)	Yes		6		
DDEPENDENT	VARCHAR2(30 BYTE)	Yes		7		
DCOLLECTIONQUERIES	NUMBER(1,0)	No	(0) 	8		
DCOLLECTIONENABLED	NUMBER(1,0)	No	(0) 	9		
DCOLLECTIONINHERIT	NUMBER(1,0)	Yes	(0) 	10		
DCHILDMANIPULATION	NUMBER(1,0)	Yes	(1) 	11		
DCREATEDATE	DATE	Yes		12		
DINDATE	DATE	Yes		13		
DOUTDATE	DATE	Yes		14		
DRELEASEDATE	DATE	Yes		15		
DLASTMODIFIEDDATE	DATE	Yes		16		
DDOCNAME	VARCHAR2(30 BYTE)	Yes		17		
DDOCTYPE	VARCHAR2(30 BYTE)	Yes		18		
DDOCTITLE	VARCHAR2(80 BYTE)	Yes		19		
DDOCAUTHOR	VARCHAR2(50 BYTE)	Yes		20		
DREVLABEL	VARCHAR2(10 BYTE)	Yes		21		
DSECURITYGROUP	VARCHAR2(30 BYTE)	Yes		22		
DDOCACCOUNT	VARCHAR2(30 BYTE)	Yes		23		
DCOLLECTIONOWNER	VARCHAR2(50 BYTE)	Yes		24		

Open in new window

Author

Commented:
i get Error(5,25): PLS-00103: Encountered the symbol "OUT" when expecting one of the following := .), @ % default character.

it points to this line:  v_FullPath    VarCHar2 OUT,
Top Expert 2009

Commented:
THere is a 2nd comma there.

   (v_SelectedID  NUMBER,
  , v_FullPath    VarCHar2 OUT

Should be:L

   (v_SelectedID  NUMBER,
    v_FullPath    VarCHar2 OUT


Plus, you should rename "collectionid" to "dcollectionid" in his sample. He was pretty smart to figure it out without seeing your table, in any case.


Author

Commented:
i made that change but still get the same error.
i agree he was did a great job figuring it out. thank you very much.
CREATE OR REPLACE
PROCEDURE USP_GETFULLPATH 
 
   (v_SelectedID  NUMBER,
    v_FullPath    VarCHar2 OUT
  )
 
 
AS
 
DECLARE v_parentD number;
 
BEGIN
 
   v_ParentID := v_SelectedID;
   v_FullPath := '';
 
 
WHILE (v_ParentID IS NOT NULL) 
   LOOP
      SELECT  dcollectionname || v_FullPath , dparentcollectionid 
       INTO v_FullPath, v_ParentID
      FROM    collections 
      WHERE dcollectionid = v_ParentID;
   END LOOP;
 
 
END USP_GETFULLPATH;

Open in new window

Top Expert 2009
Commented:
Unlock this solution and get a sample of our free trial.
(No credit card required)
UNLOCK SOLUTION

Author

Commented:
thank you, that took all the errors away.

now i am trying to execute the sp but I think I am doing it wrong passing the parameters:

exec USP_GETFULLPATH (2 in,  '' out)

Error:

Error starting at line 1 in command:
exec USP_GETFULLPATH (2 in,  '' out)
Error report:
ORA-06550: line 1, column 28:
PLS-00103: Encountered the symbol "," when expecting one of the following:

   (
Top Expert 2009

Commented:
When calling it you don't use IN or OUT keywords.

exec USP_GETFULLPATH (2,  '')


Or if you want to use other variables, call it in a PL/SQL block like so:

DECLARE
  -- put variables here
BEGIN
   USP_GETFULLPATH(2, '');
END;
/

Unlock the solution to this question.
Thanks for using Experts Exchange.

Please provide your email to receive a sample view!

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.