0

ID番号に「PID-」を追加するストアドプロシージャのコードがあるため、ID番号が1の場合、結果はPID-1になります。しかし、それは機能していません。

コードは次のとおりです。

DROP PROCEDURE `inserproducts`//
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts`(pid int,pname varchar(50),pdesc varchar(50),psupp varchar(50),pdate date,pquant int)
begin
insert into products(productid,productname,proddescription,supplier,lastpurchasedate,quantityleft)
        values(select concat('PID',pid,pname),pdesc,psupp,pdate,pquant));

select pid=last_insert_id();
end

insert into と concat を結合するにはどうすればよいですか? これで私を助けてください。

4

2 に答える 2

3

使用するINSERT INTO...SELECT

insert into products(productname,proddescription,supplier,lastpurchasedate,quantityleft)
select concat('PID',pid,pname),pdesc,psupp,pdate,pquant

productid列の場合は列を省略できAUTO_INCREMENTます。

select pid=last_insert_id();when pidis an INparameterを実行する必要があるのはなぜだろうと思っていました。

更新 1

DROP PROCEDURE `inserproducts`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts`
(
   pid int,
   pname varchar(50),
   pdesc varchar(50),
   psupp varchar(50),
   pdate date,
   pquant int
)
begin

    insert into products
          (productname,
           proddescription,
           supplier,
           lastpurchasedate,
           quantityleft)
    select concat('PID',pid,pname), pdesc, psupp, pdate, pquant;

    select last_insert_id();
end$$
DELIMITER ;
于 2013-03-13T16:56:22.693 に答える
2

ただフォローアップ...値を指定する場合、選択は必要ありません-値を使用するだけで、おそらくわずかなパフォーマンスの向上があります。

DROP PROCEDURE `inserproducts`;
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `inserproducts`
(
    in pid int,
    in pname varchar(50),
    in pdesc varchar(50),
    in psupp varchar(50),
    in pdate date,
    in pquant int
)
begin
    insert into products
        (productname, proddescription, supplier, lastpurchasedate, quantityleft)
    values
        (concat('PID',pid,pname), pdesc, psupp, pdate, pquant );

    select last_insert_id();
end$$
DELIMITER ;

別のテーブルからのデータが実際に必要でない限り、select はそのままにしておきます...

于 2013-03-14T02:55:38.770 に答える