PL/MySQL存在吗?

use*_*596 32 mysql scripting plsql

在Oracle中有PL/SQL,一种强大的命令式语言.MySQL有什么相似之处吗?

Mic*_*nco 15

虽然MySQL确实有类似的组件,但是,你不能在MySQL中使用PL\SQL.MS SQL Server使用的T-SQL也是如此.

MySQL 在他们的网站上有大量的文档.

尽管我不想参考Yahoo Answers,但这里有一个很好的解释

您将看到PL\SQL和T-SQL都是Turing-complete,并且可能提供更多功能.但MySQL有很多方法可以执行类似的任务.

以下是Yahoo Answers帖子的内容:

MySQL是一个多线程,多用户SQL数据库管理系统(DBMS)1,据MySQL AB称,它有超过1000万次安装.

用于访问MySQL数据库的库可以使用特定于语言的API在所有主要编程语言中使用.此外,名为MyODBC的ODBC接口允许支持ODBC接口的其他编程语言与MySQL数据库(如ASP或Coldfusion)进行通信.MySQL服务器和官方库大多用ANSI C实现.

MySQL在Web应用程序中很流行,并且充当LAMP,MAMP和WAMP平台的数据库组件(Linux/Mac/Windows-Apache-MySQL-PHP/Perl ...以及Bugzilla等开源错误跟踪工具.作为Web应用程序的受欢迎程度与PHP的流行密切相关,PHP通常与MySQL结合使用.PHP和MySQL是运行流行的WordPress博客平台的基本组件.

以下功能由MySQL实现,但不是由其他一些RDBMS实现:

  • 多个存储引擎,允许您选择对应用程序中的每个表最有效的引擎(在MySQL 5.0中,必须编译存储引擎;在MySQL 5.1中,存储引擎可以在运行时动态加载):o本机存储引擎(MyISAM,Falcon,Merge,内存(堆),联合,存档,CSV,黑洞,集群) - 合作伙伴开发的存储引擎(InnoDB,solidDB,NitroEDB,BrightHouse) - 社区开发的存储引擎
  • 定制存储引擎
  • 提交分组,从多个连接收集多个事务,以增加每秒的提交次数.

注意:: MySQL是用C和C++编写的.SQL解析器使用yacc和自酿的词法分析器.可以从MySQL网站获得描述代码的一些内部结构和编码指南的文档.

SQL


SQL通常扩展为结构化查询语言,是一种计算机语言,用于检索和管理关系数据库管理系统中的数据,数据库模式创建和修改以及数据库对象访问控制管理.

SQL语言被细分为几个语言元素,包括:

  • 可能对模式和数据具有持久影响的语句,或者可能控制事务,程序流,连接,会话或诊断的语句.
  • 根据特定条件检索数据的查询.
  • 表达式可以产生标量值或由数据列和行组成的表.
  • 谓词,指定可以评估为SQL三值逻辑(3VL)布尔值的条件,通常用于限制语句和查询的效果,或更改程序流.
  • 条款(在某些情况下是可选的)语句和查询的组成部分

它工作在查询数据操作数据定义事务控制的概念下

SQL:2003标准对SQL的所有部分进行了少量修改:1999,并正式引入了一些新功能,例如:1

  • 与XML相关的功能
  • 窗口功能
  • 序列发生器,允许标准化序列
  • 两个新列类型:自动生成的值和标识列
  • 新的MERGE声明
  • CREATE TABLE语句的扩展,允许"CREATE TABLE AS"和"CREATE TABLE LIKE"
  • 删除执行不佳的"BIT"和"BIT VARYING"数据类型

PL/SQL


PL/SQL是Oracle公司基于服务器的专有SQL数据库语言的过程扩展.(其他一些SQL数据库管理系统提供类似于PL/SQL的语言.)它的语法非常类似于Ada.

PL/SQL支持变量,条件,数组和异常.从Oracle RDBMS版本8开始的实现包括与面向对象相关的功能.

底层SQL函数作为声明性语言.标准SQL - 与某些函数式编程语言不同 - 不需要实现将尾调用转换为跳转.SQL不容易提供"第一行"和"其余表"访问器,并且它不能轻易地执行一些构造,如循环.然而,PL/SQL作为填补这些空白的图灵完备程序语言,允许Oracle数据库开发人员以强制方式与底层关系数据库进行交互.SQL语句可以对PL/SQL函数进行显式的内联调用,或者可以导致PL/SQL触发器触发预定义的数据操作语言(DML)事件.

执行DML的PL/SQL存储过程(函数,过程,包和触发器)被编译到Oracle数据库中:在这种程度上,它们的SQL代码可以进行语法检查.在Oracle数据库环境中工作的程序员可以构造具有此类功能的PL/SQL块,以用作过程,函数; 或者他们可以在SQL*Plus脚本中编写PL/SQL的内嵌段.

虽然程序员可以很容易地将SQL DML语句合并到PL/SQL中(例如,作为游标定义,或使用SELECT ... INTO语法),但数据定义语言(DDL)语句(如CREATE TABLE/DROP INDEX等)需要使用"动态SQL".早期版本的Oracle需要为Dynamic SQL使用复杂的内置DBMS_SQL包,系统需要显式解析和执行SQL语句.后来的版本包含了一个名为"Native Dynamic SQL"的EXECUTE IMMEDIATE语法,它大大简化了问题.在Oracle中使用DDL将导致隐式提交.程序员也可以使用动态SQL来执行DML,因为他们事先并不知道语句的确切内容.

PL/SQL为特定目的提供了几个预定义的包.这样的PL/SQL包包括:

  • DBMS_OUTPUT - 用于对非数据库目标的输出操作
  • DBMS_JOB - 用于在特定时间运行特定过程/函数(即调度)
  • DBMS_XPLAN - 用于格式化"解释计划"输出
  • DBMS_SESSION - 提供对SQL ALTER SESSION和SET ROLE语句以及其他会话信息的访问.
  • DBMS_METADATA - 用于从数据字典中提取元数据(例如DDL语句)
  • UTL_FILE - 用于在磁盘上读写文件
  • UTL_HTTP - 用于从数据库向Web服务器发出请求
  • UTL_SMTP - 用于从数据库发送邮件(通过SMTP服务器)

Oracle Corporation通常会在每个后续版本的Oracle DBMS中添加更多软件包和/或扩展软件包功能.


Ror*_*ter 5

我不知道它们有多强大,但是这个站点提供了有关使用 SQL 编写 MySQL 存储过程的信息;

http://www.mysqltutorial.org/mysql-stored-procedure-tutorial.aspx

例如

http://www.mysqltutorial.org/sql-cursor-in-stored-procedures.aspx


Eva*_*oll 5

术语问题

一些关系数据库供应商遵循 SQL 的传统定义,将其定义为声明性语言。这些供应商的示例包括 PostgreSQL、IBM、Oracle。对于这些数据库供应商,您使用他们自己提供的过程语言编写过程代码,这些语言可能会或可能不会提供 SQL。

不过,一些供应商将他们的过程语言视为 SQL 的扩展。这些供应商没有任何这样的区别。例如,在 MySQL 中,即使“存储程序”LANGUAGE SQL提供了不同的语言功能(例如LEAVEREPEAT并且UNTIL其他地方没有提供它也被声明为。因此,“SQL 例程”中的“SQL 语言”本质上与查询表达式中的“SQL 语言”不同。像微软这样的其他供应商只用一个术语来称呼他们所做的一切——“T-SQL”。删除一个术语使得很难在其他数据库中找到等效的特征,或者知道哪些特征可能不同。

完全标准化的程序特征可能会有所不同。虽然声明性查询语法很可能是相似的,因为它有一个规范。


小智 3

。pl/sql是Oracle特有的存储过程语言。不同的数据库使用不同的存储过程语言。有关存储过程的信息,请参阅mySql文档的此页。