-1

I'm trying to create a stored procedure with the in parameters first date, last date and country

This is the normal query witch works just fine.


SELECT CAR_TYPE.NAME, CAR_TYPE.TYPE, CAR.DAY_PRICE, CAR.REGISTRATION_NUMBER, AGENCY.NAME, BRANCH.NAME
FROM CAR
JOIN CAR_TYPE ON CAR_TYPE.ID = CAR.CAR_TYPE_ID
JOIN BRANCH ON BRANCH.ID = CAR.BRANCH_ID    
JOIN BRANCH_ADDRESS ON BRANCH_ADDRESS.BRANCH_ID = BRANCH.ID
JOIN AGENCY ON AGENCY.ID = BRANCH.ID`  
WHERE CAR.ID NOT IN
(SELECT BOOKING.CAR_ID FROM BOOKING WHERE BOOKING.PICKUP_DATE < '2013-01-01' AND BOOKING.RETURN_DATE > '2013-12-12')
AND BRANCH_ADDRESS.CITY_NAME = 'Stockholm'
end
marc_s
  • 732,580
  • 175
  • 1,330
  • 1,459

1 Answers1

-1

I can't make out what you are doing from your question, as it is not formatted well.

I have reformatted it so that it looks like a proper query, and made some changes to improve readability.

SELECT t.NAME, t.TYPE, c.DAY_PRICE, 
      c.REGISTRATION_NUMBER, a.NAME, b.NAME`

FROM CAR c
    JOIN CAR_TYPE t ON t.ID = c.CAR_TYPE_ID
    JOIN BRANCH b ON b.ID = c.BRANCH_ID
    JOIN BRANCH_ADDRESS ba ON ba.BRANCH_ID = b.ID
    JOIN AGENCY a ON a.ID = b.ID

WHERE ba.CITY_NAME = 'Stockholm'
  And c.ID NOT IN
      (SELECT CAR_ID 
       FROM BOOKING 
       WHERE PICKUP_DATE < '2013-01-01' 
       AND RETURN_DATE > '2013-12-12')

if this is SQL server, then the statement to cerate a basic (without error handling) stored proc would be

Create Procedure dbo.FetchCarData -- or whatever you want to name it
@firstDate DateTime,
@lastDate DateTime,
@country varChar(50)    
As
  SELECT t.NAME, t.TYPE, c.DAY_PRICE, 
      c.REGISTRATION_NUMBER, a.NAME, b.NAME`

  FROM CAR c
    JOIN CAR_TYPE t ON t.ID = c.CAR_TYPE_ID
    JOIN BRANCH b ON b.ID = c.BRANCH_ID
    JOIN BRANCH_ADDRESS ba ON ba.BRANCH_ID = b.ID
    JOIN AGENCY a ON a.ID = b.ID`

  WHERE ba.CITY_NAME = @country 
    And c.ID NOT IN
      (SELECT CAR_ID 
       FROM BOOKING 
       WHERE PICKUP_DATE < @firstDate 
       AND RETURN_DATE > @lastDate )

in MySQL I think it would look like this...

Create Procedure FetchCarData( -- or whatever you want to name it
  @firstDate DateTime,
  @lastDate DateTime,
  @country varChar(50))   
Begin
   SELECT t.NAME, t.TYPE, c.DAY_PRICE, 
      c.REGISTRATION_NUMBER, a.NAME, b.NAME`

   FROM CAR c
    JOIN CAR_TYPE t ON t.ID = c.CAR_TYPE_ID
    JOIN BRANCH b ON b.ID = c.BRANCH_ID
    JOIN BRANCH_ADDRESS ba ON ba.BRANCH_ID = b.ID
    JOIN AGENCY a ON a.ID = b.ID`

   WHERE ba.CITY_NAME = @country 
     And c.ID NOT IN
       (SELECT CAR_ID 
        FROM BOOKING 
        WHERE PICKUP_DATE < @firstDate 
        AND RETURN_DATE > @lastDate )   
End
Charles Bretana
  • 143,358
  • 22
  • 150
  • 216
  • Still wont work, i've tried something like this, it will create the trigger, but won't give me any outputs DELIMITER ;; CREATE DEFINER=`root`@`localhost` PROCEDURE `AVAILIBLECAR2`(in Datefirst DATE,in Datelast DATE,in Country varchar(11)) SELECT CAR_TYPE.NAME, CAR_TYPE.TYPE, CAR.DAY_PRICE, CAR.REGISTRATION_NUMBER, AGENCY.NAME AS AGENCY_NAME, BRANCH.NAME AS – Christian Stenholt Øelund May 30 '13 at 02:18
  • BRANCH_NAME FROM CAR JOIN CAR_TYPE ON CAR_TYPE.ID = CAR.CAR_TYPE_ID JOIN BRANCH ON BRANCH.ID = CAR.BRANCH_ID JOIN BRANCH_ADDRESS ON BRANCH_ADDRESS.BRANCH_ID = BRANCH.ID JOIN AGENCY ON AGENCY.ID = BRANCH.ID WHERE CAR.ID NOT IN (SELECT BOOKING.CAR_ID FROM BOOKING WHERE BOOKING.PICKUP_DATE < Datefirst AND BOOKING.RETURN_DATE > Datelast) AND BRANCH_ADDRESS.CITY_NAME = Country;; DELIMITER ; – Christian Stenholt Øelund May 30 '13 at 02:18