sql >> データベース >  >> RDS >> Oracle

変数のチェック中に間違ったタイプのオラクル式

    これは data_length の値を比較する方法ではありません および data_precision .それらを適切な数値として比較し、それを文字列に変換しないでください:

    DECLARE 
      old_length NUMBER;
      old_prec   NUMBER;
    BEGIN
    
      SELECT data_length, coalesce(data_precision,0)
         INTO old_length, old_prec 
      FROM user_tab_cols 
      WHERE table_name='EX_EMPLOYEE' 
        AND column_name='ID';
    
      IF (old_length <> 6 and old_prec <> 2) THEN
        EXECUTE IMMEDIATE ('ALTER TABLE EX_EMPLOYEE MODIFY ID NUMERIC(6,2)');
      END IF;
    
    END;
    /
      

    SELECT COUNT(*) 最初の選択は役に立ちません。そのような列がない場合、最初の SELECT data_length, data_precision INTO すでに ORA-01403: no data found がスローされます 例外が発生し、列が存在する場合、コードはチェックに到達しません。



    1. Laravel8で3つ以上のテーブルを外部結合

    2. Pythonのmysqlでプリペアドステートメントを使用する

    3. Oracle SQL-データ属性を決定するためのチェック制約でCASEを使用できますか?

    4. データベース内の任意の場所で値を検索する