Click here to Skip to main content
15,888,351 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I was trying to create store procedure in flamerobin as below

CREATE PROCEDURE Test_SP 
RETURNS (staff character)
AS BEGIN

SELECT distinct
COLLOQUIAL_NAME
FROM STAFF1

END

GRANT EXECUTE
 ON PROCEDURE Test_SP TO  OPUSER;

GRANT EXECUTE
 ON PROCEDURE Test_SP TO ROLE OP_USER;

GRANT EXECUTE
 ON PROCEDURE Test_SP TO  SYSDBA;


What I have tried:

I try to just create simple SP but still no result

CREATE PROCEDURE Test1_SP (
TAB_NAME VARCHAR(31) )
RETURNS (status integer)
AS
DECLARE temp integer;

begin
status=1;
    execute statement 
      ('select * from "' || tab_name)
      into :temp;
END
Posted
Updated 5-Jan-22 0:52am
Comments
0x01AA 4-Jan-22 8:02am    
And no error message? Simply unexpected return value?

You don't give a lot of information in your question. Therefore this is only a guess.

The SP:
CREATE PROCEDURE TEST_SP
RETURNS (STAFF CHAR(50))
AS BEGIN
   SELECT DISTINCT COLLOQUIAL_NAME
      FROM STAFF1
      INTO :STAFF
      DO SUSPEND;
END

Test Usage:
SELECT * FROM TEST_SP
 
Share this answer
 
Comments
Member 11776570 5-Jan-22 5:04am    
Nope it is not working, it gives me this error.

Engine Code : 335544569
Engine Message :
Dynamic SQL Error
SQL error code = -104
Token unknown - line 7, column 7
DO
0x01AA 5-Jan-22 5:19am    
Does it give the error while you try to create the SP or while executing the SP?
0x01AA 5-Jan-22 5:43am    
Look like you work with BDE? In case yes, we need to use ::STAFF instead of :STAFF

SET TERM ^;
CREATE PROCEDURE TEST_SP
RETURNS (STAFF CHAR(50))
AS BEGIN
SELECT DISTINCT COLLOQUIAL_NAME
FROM STAFF1
INTO ::STAFF
DO SUSPEND;
END
^

Member 11776570 5-Jan-22 5:57am    
Below is working now but it has still error message of "multiple rows in singleton select", please can u let me know how it will resolved

SET TERM ^ ;



CREATE PROCEDURE STAFF_Test
RETURNS (personid varchar(500),
legacyrowid varchar(500),
lastname varchar(500),
firstname varchar(500),
minit varchar(100),
ACTIVESTATUS varchar(100),
COLLOQUIAL_NAME varchar(500)
)
AS BEGIN
SELECT distinct
STAFFID AS personid,
STAFFID AS legacyrowid,
replace (STAFFNAME, substring( STAFFNAME from 1 for (position(' ' in STAFFNAME))), '') as lastname,
substring( STAFFNAME from 1 for (position(' ' in STAFFNAME))) as firstname,
Staffinit as minit
,ACTIVESTATUS
,COLLOQUIAL_NAME
FROM STAFF1
INTO :personid, :legacyrowid,:lastname,:firstname,:minit,:ACTIVESTATUS, :COLLOQUIAL_NAME ;

DO SUSPEND;
END^
SET TERM ; ^

GRANT EXECUTE
ON PROCEDURE STAFF_Test TO SYSDBA;
0x01AA 5-Jan-22 6:11am    
I think you have a semicolon to much:
INTO :personid, :legacyrowid,:lastname,:firstname,:minit,:ACTIVESTATUS, :COLLOQUIAL_NAME ;
should be
INTO :personid, :legacyrowid,:lastname,:firstname,:minit,:ACTIVESTATUS, :COLLOQUIAL_NAME
SET TERM ^ ;





ALTER PROCEDURE STAFF_Test
RETURNS (personid varchar(500),
legacyrowid varchar(500),
lastname varchar(500),
firstname varchar(500),
minit varchar(100),
ACTIVESTATUS varchar(100),
COLLOQUIAL_NAME varchar(500)
)
AS BEGIN
FOR SELECT distinct
STAFFID AS personid,
STAFFID AS legacyrowid,
replace (STAFFNAME, substring( STAFFNAME from 1 for (position(' ' in STAFFNAME))), '') as lastname,
substring( STAFFNAME from 1 for (position(' ' in STAFFNAME))) as firstname,
Staffinit as minit
,ACTIVESTATUS
,COLLOQUIAL_NAME
FROM STAFF1
INTO :personid, :legacyrowid,:lastname,:firstname,:minit,:ACTIVESTATUS, :COLLOQUIAL_NAME



DO SUSPEND;



END^
SET TERM ; ^



GRANT EXECUTE
ON PROCEDURE STAFF_Test TO SYSDBA;
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900