2

SQLワークベンチでストアドプロシージャを作成しています。住所の郵便番号を「dn357tg」の形式に変更しています。ユーザーがスペースを挿入していなくても、7文字の郵便番号を使用しています。

まず、変数をコンソール画面に出力する方法が見つかりません。これは私の状況に役立ちません。

Callステートメントを実行する場合

CALL usp_addsupplier('Bobs shopping mania', 'dn465th');

正しいフォーマットでデータベースに入力された値を見つけることを除いて、私が得るのは、列に入力されたPK、Null、およびNullだけです。

誰かが私を正しい方向に向けることができれば、私は大いにいっぱいになるでしょう

皆さん、ありがとうございました。

DELIMITER $$

CREATE DEFINER=`root`@`localhost` PROCEDURE `usp_addsupplier`(IN SuppliersName VARCHAR(30), IN SuppliersPostCode VARCHAR(15))

BEGIN


-- Declare the change varables
DECLARE postcode VARCHAR(8) DEFAULT SuppliersPostCode;

SET postcode = SuppliersPostCode;

-- Postcode reformat -----------------------------------------------

-- Change postcode to uppercase

SET postCode = UPPER(postCode);

-- Grabs the first 4 letters and stores them in a new varable

SET new_postcode = LEFT (postCode,4);

-- Adds the space to the first 4 letters

SET new_postcode = new_postcode + ' ';

-- Add the last 3 letters to the new varable

SET new_postcode = new_postcode + RIGHT(postCode,3);

INSERT INTO tblsupplier (SupplierName, SupplierPostCode VALUES (new_name, new_postcode));

END
4

2 に答える 2

1

私はMySQLが得意ではありませんが、いくつかのエラーが発生します。

まず、new_name挿入する前に設定することはないため、これは常にnullになります。

第二に、MySQLはを使用した文字列連結が好きではないと思います。StringA + StringB使用する必要がありますCONCAT(StringA, StringB)

第三に、挿入コマンドに構文エラーがあります(eggyalが指摘しているように)。

ただし、別の注意点として、英国の郵便番号を適切にフォーマットするためのロジックは機能しません。たとえば、M11AAは完全に有効な英国の郵便番号です。

M1 1AA -->  M1 1 1AA
M11AA  -->  M11A 1AA

ご覧のとおり、「フォーマットされた」郵便番号はめちゃくちゃです。これは、 INSERT関数を使用してはるかに簡単な方法で実現できます。英国の郵便番号は、可変数の文字(2〜4)の後にスペースが続き、その後に3文字が続きます。

最初のステップは、入力をクレンジングすることです(私のテストFiddleに基づいて@PostCodeであると想定されています)

REPLACE(@PostCode, ' ', '');

これによりすべてのスペースが削除されるため、生の入力にスペースがあるかどうかは関係ありません。

次に、文字列の末尾から3文字のスペースを挿入する必要があります。この位置を見つけるには、次を使用します。

CHAR_LENGTH(@PostCode) - 2

これにより、次の最終結果が得られます。

UPPER(INSERT(REPLACE(@PostCode, ' ', ''), CHAR_LENGTH(REPLACE(@PostCode, ' ', '')) - 2, 0, ' ')))

したがって、これはすべて1回の呼び出しで実行できます。

SET @SupplierName = 'Test';
SET @PostCode = 'M 1 1 A A   ';

INSERT INTO tblSupplier (SupplierName, SupplierPostCode )
VALUES (@SupplierName, UPPER(INSERT(REPLACE(@PostCode, ' ', ''), CHAR_LENGTH(REPLACE(@PostCode, ' ', '')) - 2, 0, ' ')));
于 2012-05-01T10:44:31.523 に答える
0
  1. コマンドに構文エラーがありますINSERT

    INSERT INTO tblsupplier (SupplierName, SupplierPostCode VALUES (new_name, new_postcode));
    

    代わりに

    INSERT INTO tblsupplier (SupplierName, SupplierPostCode) VALUES (new_name, new_postcode);
    
  2. DECLAREあなたはあなたの変数new_nameとに必要ですnew_postcode

  3. に値を割り当てる必要がありますnew_name

于 2012-05-01T10:00:22.290 に答える