以下の保存された関数の場合、正しいフラグは次のとおりです。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ステートメントが含まれていないことを示します。