0

Im writing a stored procedure as you can see below

the errors im getting are on lines 3 and 4, the two errors are "unexpected 'publisher' identifier" on line 3 and "unexpected AS (as)" on line 4 but I have no idea how im getting these errors or how to fix them. can someone please explain why im getting these errors with possible way to fix it please

DELIMITER //

CREATE FUNCTION uspGetPubStatsMEP (pcode publisher.publishercode%TYPE)
RETURNS text AS $$

DECLARE 
     eachrecord text; -- Variable to hold all the records retrieve  
     booktitle  book.title%TYPE;
     bcode      book.bookcode%TYPE;
     maxonhand   text;
     testtext    text:='N/A';
     totonhand   text;


    BEGIN
    -- Retrieve the name of thepublisher
    SELECT publishername INTO eachrecord
    FROM PUBLISHER
    WHERE publishercode = pcode;
    IF (eachrecordISnull)
    THEN
    RAISE NOTICE 'No publisher exists for the given code(%)',pcode;
    RETURN (-1);
    END IF;

-- The number of distinct authors who have written book(s)forthispublisher.
SELECT eachrecord||' No.Authors:'||COUNT(DISTINCTauthornum)INTO
eachrecord
FROM BOOK B, WROTE W
WHERE publishercode=pcodeANDB.bookcode=W.bookcode;

-- The number of different books published by this publisher.
SELECT eachrecord||' No.Books:'||COUNT(*)INTOeachrecord
FROM BOOK
WHERE publishercode=pcode;

-- The title of the book published by this publisher,that has the highest 
number
-- of onHand (Inventory) values from all branchesof Henry Books.
CREATE TABLE book_onhandAS
SELECT bookcode,SUM(onhand)ASsum_onhand
FROM INVENTORYI,BRANCHB
WHERE I.branchnum=B.branchnum
GROUP BY bookcode;

CREATE TABLE pubbook_onhand AS
SELECT bookcode, sum_onhand
FROM book_onhand
WHERE bookcodeIN 
(   SELECT bookcode 
    FROM BOOK 
    WHERE publishercode = pcode
)
GROUP BY bookcode,sum_onhand;

SELECT bookcode INTO bcode
FROM pubbook_onhand
WHERE sum_onhand = (SELECT MAX(sum_onhand)
FROM pubbook_onhand
);

SELECT title INTO booktitle
FROM BOOK
WHERE bookcode=bcode;

-- The number of on Hand values for the above book.
SELECT sum_onhand INTO maxonhand
FROM pubbook_onhand
WHERE bookcodeIN ( SELECT bookcode
FROM BOOK
WHERE title = booktitle
);

-- The cumulative sum of on Hand values from all branches for all books 
published by thispublisher.
-- use table book_onhand
SELECT sum_onhand INTO totonhand
FROM book_onhand bh, BOOK B
WHERE publishercode = pcode AND
bh.bookcode = B.bookcode;

IF (booktitle IS NULL)
THEN SELECT testtext INTO booktitle;
SELECT testtext INTO maxonhand;
SELECT testtext INTO totonhand;
END IF;

SELECT eachrecord || ' onhandVal:' ||maxonhand ||'
Totalonhand:'|| totonhand ||' onHandBook:'||booktitle INTO eachrecord;

    DROP TABLE book_onhand;
    DROP TABLE pubbook_onhand;
RETURN eachrecord;
END;
$$ language plpgsql;

-- Various statistics for all publishers in the database
CREATE OR REPLACE FUNCTION uspGetAllPubStatsMEP()
RETURNS SETOF text as $$

DECLARE

pcode publisher%rowtype;
pubstat text;

BEGIN
FOR pcode IN SELECT * FROM PUBLISHER
LOOP
    SELECT pcode.publishercode||': '|| uspGetPubStatsMEP 
(pcode.publishercode)
INTO pubstat;
RETURN NEXT pubstat;
    END LOOP;
RETURN;
END;
$$ language plpgsql;


SELECT uspGetAllPubStatsMEP ();
  • That sort of resembles a MySQL function declaration, but only sort of... and google thinks "plpgsql" indicates Postgres – Uueerdo Nov 20 '17 at 22:35
  • Postgres <> MySQL, that code it actually contains `$$ language plpgsql;` which sure as heck isn't MySQL related. – Paul Maxwell Nov 20 '17 at 23:04

0 Answers0