PL / MySQL存在吗?

时间:2012-03-21 16:32:59

标签: mysql scripting plsql

在Oracle中有PL / SQL,一种强大的命令式语言。 MySQL有什么类似的东西吗?

5 个答案:

答案 0 :(得分:14)

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

MySQL上有大量文档at their website.

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

您将看到PL \ SQL和T-SQL都是图灵完备的,并且可能提供更多功能。但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实现,但不是由其他功能实现   RDBMSes:

     
      
  • 多个存储引擎,允许您选择对应用程序中每个表最有效的引擎(在MySQL 5.0中,   存储引擎必须编译;在MySQL 5.1中,存储引擎可以   在运行时动态加载):o本机存储引擎(MyISAM,   猎鹰,合并,记忆(堆),联邦,档案,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"和"创建表格"
  •   
  • 删除执行不力的" BIT"和" BIT VARYING"数据类型
  •   
     

<强> PL / SQL

     
     

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

     

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

     

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

     

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

     

虽然程序员可以很容易地将SQL DML语句合并到   PL / SQL(例如,作为游标定义,或使用SELECT ...   INTO语法),数据定义语言(DDL)语句,如CREATE   TABLE / DROP INDEX等需要使用&#34; Dynamic SQL&#34;。前   Oracle的版本需要使用复杂的内置DBMS_SQL   用于动态SQL的包,系统需要显式解析   并执行SQL语句。后来的版本包含了EXECUTE   IMMEDIATE语法称为&#34; Native Dynamic SQL&#34;这相当大   简化事宜。在Oracle中使用DDL将导致   隐式提交。程序员也可以使用Dynamic SQL来执行DML   他们事先并不知道陈述的确切内容。

     

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

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

Oracle Corporation通常会添加更多软件包和/或扩展   每个后续版本的Oracle DBMS都具有包功能。

答案 1 :(得分:3)

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

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

E.g。

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

谷歌的“Getting started with mysql stored procedures”,语法与PLSQL相距甚远。

    DELIMITER //     
    CREATE PROCEDURE GetAllProducts()
       BEGIN
       SELECT *  FROM products;
    END //
    DELIMITER ;

答案 4 :(得分:0)

术语问题

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

尽管有些供应商将其过程语言视为SQL的扩展。这些供应商没有任何区别。例如,在MySQL中,"Stored Program"LANGUAGE SQL声明,尽管它提供了不同的语言功能(like LEAVE, REPEAT and UNTIL that are not provided elsewhere)。因此,您在“ SQL例程”中实际上具有与在查询表达式中不同的“ SQL语言”。其他像Microsoft这样的供应商称他们所做的一切都只有一个术语-“ T-SQL”。术语的删除使您很难在其他数据库中找到等效功能,也很难知道哪些功能可能会有所不同。

完全标准化的程序功能可能会有所不同。声明性查询语法可能很相似,因为其中有一个规范。