【问题标题】:MySql stored procedures: How to select from procedure table?MySql 存储过程:如何从过程表中选择?
【发布时间】:2010-12-10 09:39:20
【问题描述】:

假设我们有一个存储过程从表中选择一些东西:

创建过程 database.getExamples() 选择 * FROM 示例;

如何在以后的选择中使用此过程的结果? (我试过了

SELECT * FROM (CALL database.getExamples())

但没有成功。) 我应该在过程中使用 SELECT... INTO outVariable 吗?还是应该使用返回表格的函数?

【问题讨论】:

  • 试图寻找解决方案,我正在尝试以下,但显然返回数据类型('TABLE')不起作用;
     CREATE PROCEDURE database.getExamples( OUT examplesTable TABLE /*  我在这里走对了吗..?
    跨度>

标签: mysql stored-procedures


【解决方案1】:

重新表述了这个帖子中的问题:Can a stored procedure/function return a table?。 显然,不使用临时表是不可能的。

【讨论】:

  • 是什么让它如此明显以至于没有临时表是不可能的?这没有回答问题。
  • @circuitry 语法清楚地表明 MySQL 不允许 select * from getExmaples() ...。这并不一定意味着没有其他方法可以做到这一点。这是一个令人沮丧的问题;在 PostgreSQL 中,select * from getExamples() ... 很容易。
【解决方案2】:
CREATE TABLE #TempTable
(OID int IDENTITY (1,1),
VAr1 varchar(128) NOT NULL,
VAr2 varchar(128) NOT NULL)

Populate temporary table

INSERT INTO #TempTable(VAr1 , VAr2 )
SELECT * FROM examples

【讨论】:

  • 谢谢丹妮!这意味着我每次都必须重建整个表?这对我来说似乎是很多额外的工作。只需运行 CALL getExamples() 显然可以提供我需要的数据 - 问题是如何在 select 语句中访问它...
  • 这是 SQL Server 代码。在 mysql - 你可以创建临时表使用它,然后删除它。
  • 从性能方面来说,我不是专业人士,我认为它与在嵌套语句中使用它几乎相同,嵌套选项中可能有一些优化的可能性,但除非你是处理非常大/复杂的选择,您不会注意到它。
  • 哦,现在我明白你想要做什么了。我想这是可能的,不过需要自己尝试一下。
【解决方案3】:

然后在 SQL server 中您可以执行SELECT * FROM database.getExamples()

如果你想重复使用“过程”,是的,我会把它放到一个表值函数中。

否则你可以在存储过程中选择一个#temporary 表。

【讨论】:

  • 嗨,RR!我正在尝试这个,但显然数据类型“TABLE”无效: CREATE PROCEDURE database.getExamples( OUT examplesTable TABLE /*
  • SQL Server = Microsoft SQL Server,它具有与 MySQL 不同的功能。这意味着您可以在 MS SQL 中完成的很多事情在 MySQL 中无法完成,反之亦然。 OP 请求 MySQL。
猜你喜欢
  • 1970-01-01
  • 2010-12-02
  • 2010-12-15
  • 2016-10-05
  • 1970-01-01
  • 2011-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多