← Back to team overview

maria-discuss team mailing list archive

Re: CREATE PROCEDURE clauses

 

Hi, Federico!

On Sep 02, Federico Razzoli wrote:
> Ciao,
> 
> I wanted to add some info in the CREATE PROCEDURE page in the KB, but
> I think that some info about CREATE PROCEDURE clauses miss both in the
> kb and in the MySQL manual.
> 
> * [NOT] DETERMINISTIC. From MySQL docs:
> "A routine is considered “deterministic” if it always produces the
> same result for the same input parameters, and “not deterministic”
> otherwise."
> What does this exactly mean for procedures? OUT and INOUT parameters?
> Resultsets returned by the procedure? Both?

It doesn't really matter.

For stored functions, optimizer uses the value of [NOT] DETERMINISTIC to
optimize function calls.

But for procedures it's not used for anything, as far as I know.

> * NO SQL: As far as I understand, even SET is a SQL statement. I guess
> that a "no sql" function is something like 
> CREATE FUNCTION x(n INT) RETURNS INT
> BEGIN
> RETURN n*2;
> END;

Not quite.
As far as I understand,
"NO SQL" means that there's no SQL in the routine *at all*.
Like,it might be written on C or ADA or whatever sql standard specifies:

<language clause> ::= LANGUAGE <language name>
<language name> ::=
    ADA
  | C
  | COBOL
  | FORTRAN
  | M | MUMPS
  | PASCAL
  | PLI
  | SQL

It's particularly important if a routine has the EXTERNAL clause,
instead of the BEGIN ... END body.

But MariaDB does not support EXTERNAL or any other LANGUAGE besides SQL.

> I'm sorry if this info is already written somewhere, but I really
> wasn't able to find it - and I feel that the KB should specify things
> like these.

It's only on the SQL-99 Complete, Really pages:

https://mariadb.com/kb/en/create-procedurefunctionmethod-statement/#language-subclause
https://mariadb.com/kb/en/create-procedurefunctionmethod-statement/#sql-data-access-indication-subclause

Regards,
Sergei


Follow ups

References