web-dev-qa-db-ja.com

MySqlWorkbenchでストアドプロシージャをテストする

2つのテーブルに挿入するInsertストアドプロシージャがあります。最初のテーブルのLast_Insert_IDを使用する2番目のテーブル。これが私のsprocです:

    DELIMITER $$

CREATE DEFINER=`root`@`%` PROCEDURE `new_user_create`(

    IN oFarmName      varchar(45),
    IN oFirstName        varchar(45),
    IN oAddress1         varchar(45),
    IN oCity         varchar(45),
    IN oState         varchar(45),
    IN oZip         varchar(45),
    IN oCountry         varchar(45)
)
BEGIN
    insert into intelliair.individual
    ( FarmName, FirstName)
    values ( oFarmName, oFirstName);
       insert into intelliair.address
    (IndividualID, Address1, City, State, Zip, Country)
    Values (Last_Insert_ID(), oAddress1, oCity, oState, oZip, oCountry);
END

MySqlワークベンチでクエリをテストする方法は次のとおりです。

call new_user_create(@myFarm, @MyName, @MyAddress, @MyCity, @MyState, @MyZip, @MyCountry)

「列Address1をnullにすることはできません」というエラーが表示されます

どこに行くの? sprocにありますか?それとも私がそれを呼んでいる方法ですか?

7
EB.

ColumnAddress1をnullにすることはできません」は、intelliair.address.Address1フィールドをnot nullで定義する必要があることを示します。

また、ストアドプロシージャに渡す前に、@MyAddressの値を事前に定義しているとは思いません。
定義されていない限り、NULLとして扱われるため、エラーがスローされます。

次のようなストアドプロシージャを呼び出す前に、値をクロスチェックするには:

select @MyAddress;  -- ,@myFarm, @MyName, @MyCity, @MyState, @MyZip, @MyCountry;

アップデート1

各パラメータの値を直接入力することにより、ストアドプロシージャを呼び出すことができます。

call new_user_create(  
    'my Farm value', -- @myFarm  
    'E B', -- @MyName  
    'My Address is SO', -- @MyAddress1  
    'My City is Coders', -- @MyCity  
    'CA', -- @MyState  
    '12345', -- @MyZip  
    'US' -- @MyCountry
);
9
Ravinder Reddy

例外は、INSERT(またはUPDATE)ステートメントによってスローされます。つまり、Address1として宣言されているNOT NULLという名前の列にNULL値が割り当てられます。

あなたが示していることから、最も可能性の高い説明は、oAddress1パラメーターとして渡された値がNULLであり、例外が2番目のINSERTステートメントによってスローされていることです。

したがって、最も可能性の高い説明は、プロシージャの呼び出しが行われたときに、@MyAddressユーザー変数に値が割り当てられていないことです。

(intelliair.individualテーブルにAddress1列がないこと、またはある場合はNOT NULLとして定義されていないことを確認できます。)

(例外をスローしているのはステートメントの1つではなく、BEFORE INSERT FOR EACH ROWトリガーのINSERTステートメントのような再帰SQLステートメントである可能性もあります。)

0
spencer7593
USE lportal;
DELIMITER $$
CREATE PROCEDURE `iemp`(IN eid INT(11),IN ename varchar(15),IN dname varchar(15),IN doj DATE)
BEGIN
INSERT INTO e_emp (eid,ename,dname,doj) VALUES (eid,ename,dname,doj);
END
0
ASR