Is declare in mysql giving syntax error? - mysql

I'm new to mysql and I'm trying to create a stored procedure but getting syntax error due to declare a variable.
The version of mysql I'm using is 5.5.43 and my procedure is:
CREATE PROCEDURE spSearch
(
p_ACTION INT,
p_PROJECT_CUSTOMER INT,
p_PROJECT_NAME VARCHAR(50),
p_PROJECT_SALESPERSON INT,
p_PROJECT_MANAGER INT,
p_PROJECT_PMF INT,
p_PROJECT_TYPE INT,
p_PROJECT_DESIGNER INT,
p_PROJECT_AANDD INT,
p_PROJECT_REFD INT,
p_PROJECT_VENDOR INT,
p_PROJECT_GENERALCONTRACTOR INT,
p_PROJECT_PUNCHLIST varchar(1),
p_PROJECT_LOCATION INT,
p_PROJECT_CLIENTTYPE INT,
p_PROJECT_INSTALLDATE VARCHAR(50),
p_PROJECT_INSTALLDATETO VARCHAR(50),
p_PROJECT_ORDERENTRYDATE VARCHAR(50),
p_PROJECT_ORDERENTRYDATETO VARCHAR(50),
p_PROJECT_MOVEINDATE VARCHAR(50),
p_PROJECT_MOVEINDATETO VARCHAR(50),
p_PROJECT_ACTIVE_FLAG VARCHAR(1)
)
BEGIN
DECLARE ABC VARCHAR(1400);
END;
I'm getting this error:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 28
Please help to remove this syntax error.

It seems that you have a problem with your delimiters. try this:
delimiter //
CREATE PROCEDURE spSearch
(
p_ACTION INT,
p_PROJECT_CUSTOMER INT,
p_PROJECT_NAME VARCHAR(50),
p_PROJECT_SALESPERSON INT,
p_PROJECT_MANAGER INT,
p_PROJECT_PMF INT,
p_PROJECT_TYPE INT,
p_PROJECT_DESIGNER INT,
p_PROJECT_AANDD INT,
p_PROJECT_REFD INT,
p_PROJECT_VENDOR INT,
p_PROJECT_GENERALCONTRACTOR INT,
p_PROJECT_PUNCHLIST varchar(1),
p_PROJECT_LOCATION INT,
p_PROJECT_CLIENTTYPE INT,
p_PROJECT_INSTALLDATE VARCHAR(50),
p_PROJECT_INSTALLDATETO VARCHAR(50),
p_PROJECT_ORDERENTRYDATE VARCHAR(50),
p_PROJECT_ORDERENTRYDATETO VARCHAR(50),
p_PROJECT_MOVEINDATE VARCHAR(50),
p_PROJECT_MOVEINDATETO VARCHAR(50),
p_PROJECT_ACTIVE_FLAG VARCHAR(1)
)
BEGIN
DECLARE ABC VARCHAR(1400);
END//
delimiter ;

Related

Creating table and importing data from csv/excel to MySQL error

I keep receiving errors that my data is too long when trying to import a CSV dataset into MySQL.
I created the following table:
CREATE TABLE Master_SA(
Yr_Month TEXT,
Employee_Name VARCHAR(50),
Role_Detail TEXT,
Manager_Name VARCHAR(50),
Sales_Region VARCHAR(50),
Ramp_Status VARCHAR(8),
Office_Location VARCHAR(10),
Rep_A_Name VARCHAR(50),
Rep_B_Name VARCHAR(50),
Tenure_in_Months INT,
Number_of_Touches_Completed INT,
Calls INT,
Connected INT,
Total_Talk_Time INT,
Total_Number_of_Initial_Opportunities INT,
Number_of_Demos_Held INT,
Number_of_Initial_Wins INT,
Number_of_Total_Wins INT,
Avg_Time_of_Connected_Calls TEXT,
Connect_Rate TEXT,
Show_Rate TEXT,
Initial_Wins_Demo TEXT
);
And this is a screenshot of the CSV file

Create stored procedure with updating multiple columns

I am getting the following error in my code:
MySQL said: Documentation
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'END' at line 20
CREATE PROCEDURE updateUser(
IN firstname VARCHAR(20),
IN Vlastname VARCHAR(20),
IN Vemail VARCHAR(50),
IN Vpassword VARCHAR(100),
IN Vyear INT(5),
IN Vgender VARCHAR(10),
IN Vprefer VARCHAR(200),
IN Vinterested VARCHAR(200),
IN Vabout VARCHAR(200),
IN Vid INT(11)
)
BEGIN
UPDATE users SET
name = (CASE WHEN firstname IS NOT NULL THEN firstname ELSE name
END),
lastname = (CASE WHEN vlastname IS NOT NULL THEN vlastname ELSE lastname
END)
WHERE id = Vid
END;
When developing stored procedures in MySQL, you must set a delimiter different from ; to properly end the stored program statement. This allows the use of ; to delineate multiple statements within the procedure.
Per MySQL 25.1 Defining Stored Programs docs:
If you use the mysql client program to define a stored program containing semicolon characters, a problem arises. By default, mysql itself recognizes the semicolon as a statement delimiter, so you must redefine the delimiter temporarily to cause mysql to pass the entire stored program definition to the server.
Therefore consider below adjustment:
DELIMITER // -- TEMPORARILY CHANGE DELIMITER FROM ;
CREATE PROCEDURE updateUser (
IN firstname VARCHAR(20),
IN Vlastname VARCHAR(20),
IN Vemail VARCHAR(50),
IN Vpassword VARCHAR(100),
IN Vyear INT(5),
IN Vgender VARCHAR(10),
IN Vprefer VARCHAR(200),
IN Vinterested VARCHAR(200),
IN Vabout VARCHAR(200),
IN Vid INT(11)
)
BEGIN
UPDATE `users`
SET
`name` = CASE WHEN `firstname` IS NOT NULL THEN `firstname` ELSE `name` END,
`lastname` = CASE WHEN `vlastname` IS NOT NULL THEN `vlastname` ELSE `lastname` END
WHERE `id` = Vid; -- SEMICOLON HERE TO SEPARATE STATEMENTS
END
// -- PROPERLY END PROCEDURE STATEMENT
DELIMITER ; -- RESET DELIMITER BACK TO ;
you are missing a semicolon after The WHERE clause
And you can simplify it
DELIMITER //
CREATE PROCEDURE updateUser(
IN firstname VARCHAR(20),
IN Vlastname VARCHAR(20),
IN Vemail VARCHAR(50),
IN Vpassword VARCHAR(100),
IN Vyear INT(5),
IN Vgender VARCHAR(10),
IN Vprefer VARCHAR(200),
IN Vinterested VARCHAR(200),
IN Vabout VARCHAR(200),
IN Vid INT(11)
)
BEGIN
UPDATE users SET
name = COALESCE (firstname, name),
lastname = COALESCE (vlastname,lastname)
WHERE id = Vid;
END//
DELIMITER ;

mysql syntax error 1064 on create procedure

Hi I have created a table and now creating a stored procedure.
CREATE PROCEDURE p_order_insert (in in_agent_id Varchar(10),in in_rate_city varchar(15),in in_sendername varchar(50),in in_senderaddress1 varchar(50),in in_senderaddress2 varchar(50),in in_senderaddress3 varchar(50),in in_senderaddress4 varchar(50),in in_sendercity varchar(50),in in_senderstate varchar(50),in in_senderpostcode varchar(10),in in_sendercountry varchar(15),in in_receivername varchar(50),in in_receiveraddress1 varchar(50),in in_receiveraddress2 varchar(50),in in_receiveraddress3 varchar(50),in in_receiveraddress4 varchar(50),in in_receivercity varchar(50),in in_receiverstate varchar(50),in in_receiverpostcode varchar(10),in in_receivercountry varchar(15),in in_item1_description varchar(80),in in_item2_description varchar(80),in in_item3_description varchar(80),in in_item4_description varchar(80),in in_item5_description varchar(80),in in_item6_description varchar(80),in in_item1_quantity int,in in_item2_quantity int,in in_item3_quantity int,in in_item4_quantity int,in in_item5_quantity int,in in_item6_quantity int,in in_item1_weight double,in in_item2_weight double,in in_item3_weight double,in in_item4_weight double,in in_item5_weight double,in in_item6_weight double,in in_item1_value double,in in_item2_value double,in in_item3_value double,in in_item4_value double,in in_item5_value double,in in_item6_value double,in in_order_status Varchar(10),in in_total_price double,in in_agent_commission double,in in_payment_received Varchar(10), OUT out_awb_ref_id Varchar (10)) BEGIN
INSERT INTO hvp_order_master (agent_id, rate_city, sendername, senderaddress1, senderaddress2, senderaddress3, senderaddress4, sendercity, senderstate, senderpostcode, sendercountry, receivername, receiveraddress1, receiveraddress2, receiveraddress3, receiveraddress4, receivercity, receiverstate, receiverpostcode, receivercountry, item1_description, item2_description, item3_description, item4_description, item5_description, item6_description, item1_quantity, item2_quantity, item3_quantity, item4_quantity, item5_quantity, item6_quantity, item1_weight, item2_weight, item3_weight, item4_weight, item5_weight, item6_weight, item1_value, item2_value, item3_value, item4_value, item5_value, item6_value, order_status, total_price, agent_commission, payment_received)
VALUES
(in_agent_id, in_rate_city, in_sendername, in_senderaddress1, in_senderaddress2, in_senderaddress3, in_senderaddress4, in_sendercity, in_senderstate, in_senderpostcode, in_sendercountry, in_receivername, in_receiveraddress1, in_receiveraddress2, in_receiveraddress3, in_receiveraddress4, in_receivercity, in_receiverstate, in_receiverpostcode, in_receivercountry, in_item1_description, in_item2_description, in_item3_description, in_item4_description, in_item5_description, in_item6_description, in_item1_quantity, in_item2_quantity, in_item3_quantity, in_item4_quantity, in_item5_quantity, in_item6_quantity, in_item1_weight, in_item2_weight, in_item3_weight, in_item4_weight, in_item5_weight, in_item6_weight, in_item1_value, in_item2_value, in_item3_value, in_item4_value, in_item5_value, in_item6_value, in_order_status, in_total_price, in_agent_commission, in_payment_received); END;;
However, I am getting
1064 - Erreur de syntaxe près de '' à la ligne 6 there is no such issue which I can see.
Could someone help?
When you included the DELIMITER wrapper it saves, like below.
In addition I am sure you have a poor schema design.
DROP PROCEDURE IF EXISTS p_order_insert;
DELIMITER $
CREATE PROCEDURE p_order_insert
(in in_agent_id Varchar(10),
in in_rate_city varchar(15),
in in_sendername varchar(50),
in in_senderaddress1 varchar(50),
in in_senderaddress2 varchar(50),
in in_senderaddress3 varchar(50),
in in_senderaddress4 varchar(50),
in in_sendercity varchar(50),
in in_senderstate varchar(50),
in in_senderpostcode varchar(10),
in in_sendercountry varchar(15),
in in_receivername varchar(50),
in in_receiveraddress1 varchar(50),
in in_receiveraddress2 varchar(50),
in in_receiveraddress3 varchar(50),
in in_receiveraddress4 varchar(50),
in in_receivercity varchar(50),
in in_receiverstate varchar(50),
in in_receiverpostcode varchar(10),
in in_receivercountry varchar(15),
in in_item1_description varchar(80),
in in_item2_description varchar(80),
in in_item3_description varchar(80),
in in_item4_description varchar(80),
in in_item5_description varchar(80),
in in_item6_description varchar(80),
in in_item1_quantity int,
in in_item2_quantity int,
in in_item3_quantity int,
in in_item4_quantity int,
in in_item5_quantity int,
in in_item6_quantity int,
in in_item1_weight double,
in in_item2_weight double,
in in_item3_weight double,
in in_item4_weight double,
in in_item5_weight double,
in in_item6_weight double,
in in_item1_value double,
in in_item2_value double,
in in_item3_value double,
in in_item4_value double,
in in_item5_value double,
in in_item6_value double,
in in_order_status Varchar(10),
in in_total_price double,
in in_agent_commission double,
in in_payment_received Varchar(10),
OUT out_awb_ref_id Varchar (10))
BEGIN
INSERT INTO hvp_order_master (agent_id, rate_city, sendername, senderaddress1, senderaddress2,
senderaddress3, senderaddress4, sendercity, senderstate, senderpostcode, sendercountry,
receivername, receiveraddress1, receiveraddress2, receiveraddress3, receiveraddress4,
receivercity, receiverstate, receiverpostcode, receivercountry, item1_description,
item2_description, item3_description, item4_description, item5_description,
item6_description, item1_quantity, item2_quantity, item3_quantity, item4_quantity,
item5_quantity, item6_quantity, item1_weight, item2_weight, item3_weight, item4_weight,
item5_weight, item6_weight, item1_value, item2_value, item3_value, item4_value, item5_value,
item6_value, order_status, total_price, agent_commission, payment_received)
SELECT
in_agent_id, in_rate_city, in_sendername, in_senderaddress1, in_senderaddress2,
in_senderaddress3, in_senderaddress4, in_sendercity, in_senderstate, in_senderpostcode,
in_sendercountry, in_receivername, in_receiveraddress1, in_receiveraddress2, in_receiveraddress3,
in_receiveraddress4, in_receivercity, in_receiverstate, in_receiverpostcode, in_receivercountry,
in_item1_description, in_item2_description, in_item3_description, in_item4_description,
in_item5_description, in_item6_description, in_item1_quantity, in_item2_quantity, in_item3_quantity,
in_item4_quantity, in_item5_quantity, in_item6_quantity, in_item1_weight, in_item2_weight,
in_item3_weight, in_item4_weight, in_item5_weight, in_item6_weight, in_item1_value, in_item2_value,
in_item3_value, in_item4_value, in_item5_value, in_item6_value, in_order_status, in_total_price,
in_agent_commission, in_payment_received;
END$$
DELIMITER ;
The need for a DELIMITER is dependent on which client-side tool you use. For PHPMyAdmin, it is not needed typically if ever.
With MySQL Workbench it is.
Add DELIMITER ## to the start. Also, at the end of your code you have the ; twice. END;; 1 is enough.
DELIMITER ##
CREATE PROCEDURE...
END##
DELIMITER;

syntax error inserting values using store procedure

create procedure sp_FldBkgData
(
IN awb int,
IN origin varchar(2),
IN dist varchar(2),
IN courier int,
IN pdate varchar(10),
IN acc int,
IN service varchar(1),
IN agent1 varchar(5),
IN agent2 varchar(5),
IN bkgtime int,
IN sname varchar(45),
IN sadd1 varchar(45),
IN sadd2 varchar(45),
IN sadd3 varchar(45),
IN scity varchar(45),
IN sstate varchar(25),
IN spostal int,
IN scountry varchar(8),
IN sph varchar(11),
IN sfax varchar(25),
IN smail varchar(45),
IN sref varchar(45),
IN carrier varchar(45),
IN ccompany varchar(45),
IN cname varchar(45),
IN cadd1 varchar(45),
IN cadd2 varchar(45),
IN cadd3 varchar(45),
IN ccity varchar(25),
IN cstate varchar(15),
IN ccountry varchar(45),
IN cgateway varchar(3),
IN cph varchar(25),
IN goods varchar(45),
IN paymode varchar(7),
IN curr varchar(3),
IN val int,
IN pcs int,
IN weight double,
IN handling varchar(1),
IN insurrance varchar(3),
IN fac int,
IN gst int
)
BEGIN
INSERT INTO cms_module_fieldbooking (Awb) VALUES (awb);
END
Here is the error:
To create a procedure in the MySQL Workbench Query Editor, you need to specify a delimiter other than the semicolon.
For example:
DELIMITER $$
CREATE PROCEDURE foo()
BEGIN
SELECT 'foo';
END$$
DELIMITER ;
As an alternative, MySQL Workbench also has a "routine" editor that automatically handles the delimiter for you. (In the schema list on the left, right click on Procedures, and select "Create Procedure". When you click Apply, you'll see the actual script, that includes the DELIMITER statements.

creating a stored procedure in MySQL

I am running following query but it is showing me an error..
1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'end' at line 18
DELIMITER //
create procedure usp_ItemAdd(
p_itemname varchar(50),
p_company varchar(50),
p_model varchar(50),
p_unit varchar(10),
p_photo varchar(12),
p_color varchar(50),
p_size varchar(50),
p_weight varchar(20),
p_stock varchar(20)
)
begin
insert into item_tbl(
item_name,company,model_no,unit,photo,color,size,weight,stock
)
values(
p_itemname,p_company,p_model,p_unit,p_photo,p_color,p_size,p_weight,p_stock
)
end //
DELIMITER ;
Add delimiter and finish insert statement with ;
delimiter $$
create procedure usp_ItemAdd(
p_itemname varchar(50),
p_company varchar(50),
p_model varchar(50),
p_unit varchar(10),
p_photo varchar(12),
p_color varchar(50),
p_size varchar(50),
p_weight varchar(20),
p_stock varchar(20)
)
begin
insert into item_tbl(
item_name,company,model_no,unit,photo,color,size,weight,stock
)
values(
p_itemname,p_company,p_model,p_unit,p_photo,p_color,p_size,p_weight,p_stock
);
end $$
delimiter ;