3

以下の保存された関数の場合、正しいフラグは次のとおりです。CONTAINSSQLまたはNOSQL?

CREATE FUNCTION BigIntHash(str VARCHAR(255)) RETURNS BIGINT UNSIGNED DETERMINISTIC
RETURN CONV(SUBSTRING(CAST(SHA(str) AS CHAR), 1, 15), 16, 10)

CREATE FUNCTION upi(a VARCHAR(14), b INT(8) UNSIGNED, c VARCHAR(13)) RETURNS BIGINT UNSIGNED DETERMINISTIC
RETURN IF(a IS NULL, 
  IF(b IS NULL, 
    IF(c IS NULL, 
      NULL, 
      BigIntHash(CONCAT("a-", a))
    ), 
    BigIntHash(CONCAT("b-", b))
  ), 
  BigIntHash(CONCAT("c-", c))
)

定義はhttp://dev.mysql.com/doc/refman/5.1/en/create-procedure.htmlにありますが、まだわかりません。

  • CONTAINS SQLは、ルーチンにデータの読み取りまたは書き込みを行うステートメントが含まれていないことを示します。これらの特性のいずれも明示的に指定されていない場合、これがデフォルトです。このようなステートメントの例としては、SET @x =1またはDORELEASE_LOCK('abc')があります。これらは実行されますが、データの読み取りも書き込みも行われません。

  • NO SQLは、ルーチンにSQLステートメントが含まれていないことを示します。

4

1 に答える 1

1

どちらもNO SQL、テーブル、カーソル、または変数のデータにアクセスしないためです。

SQLステートメントの構成要素については、http: //dev.mysql.com/doc/refman/5.1/en/sql-syntax.htmlを参照してください。

CONV() SHA()この章では、のような関数またはCONCAT()言及されていない関数に注意してください。

于 2013-02-18T15:44:19.203 に答える