标签: sql-function

pdo 定义一个函数,然后在 select 语句中使用它

我的查询有点像这样:

CREATE FUNCTION func ... ;
SELECT * FROM  ....;
Run Code Online (Sandbox Code Playgroud)

我使用的 phpPDO不允许在 a 中使用超过 1 个语句$pdo->query(),因此我决定将查询分成两个,因此我使用执行查询CREATE FUNCTION,$pdo->exec()然后$pdo->query()在 select 语句上使用。

但是,我在执行 select 语句时收到错误FUNCTION database.func does not exist。我该如何解决这个问题?当我在 phpmyadmin 中将其作为单个查询运行时,它工作正常

编辑:PHP代码:

class MyClass {
function connectPDO($user,$pass,$chartset="utf8"){
    //simple function for making a new PDO object and mysql connection
    $dbname = "my_db";
    try {
        //creating new pdo
        $pdo = new PDO('mysql:host=localhost;dbname='.$dbname, $user,$pass);
        //attributes set to throw errors and exceptions which can be …
Run Code Online (Sandbox Code Playgroud)

php mysql sql pdo sql-function

4
推荐指数
1
解决办法
2666
查看次数

从PL/SQL函数返回多个值

我需要尝试在飞机上找到一个免费座位,然后保留该座位.

我需要返回一个值来表示成功与否以及座位号.通过环顾四周,我发现函数不能返回超过1的值,所以我考虑使用数组,但是查看那些文档,很明显我在PL/SQL上不太了解如何使用它们.

所以我在这里搁浅了.

到目前为止,我得到的代码如下所示:

CREATE OR REPLACE FUNCTION RESERVE_SEAT(P_NO VARCHAR2, ID NUMBER, RESERVE_TIME NUMBER, S_NO VARCHAR2)
RETURN INTEGER AS
  RES INTEGER := 0;
  COUNTS INTEGER := 0;
BEGIN
SELECT COUNT(*) INTO COUNTS FROM SEAT WHERE SEAT_NO=S_NO AND PLANE_NO=P_NO;
IF(COUNTS = 1) THEN
  UPDATE SEAT
  SET RESERVED = ID, BOOKING_TIME = RESERVE_TIME, BOOKED=ID
  WHERE PLANE_NO=P_NO AND SEAT_NO=S_NO;
  COMMIT;
    ELSE IF(COUNTS = 0) THEN
      RES := -1;
    END IF;
  END IF;
  RETURN RES;
END RESERVE_SEAT;
Run Code Online (Sandbox Code Playgroud)

以上函数调用上述函数

CREATE OR REPLACE FUNCTION GET_FREE_SEAT(P_NO VARCHAR2, …
Run Code Online (Sandbox Code Playgroud)

oracle plsql sql-function

4
推荐指数
1
解决办法
5万
查看次数

PostgreSQL:在数组中的所有项目上选择一个函数

考虑一个包含以下行的表:

id       | bigint
polygons | geometry(Polygon,4326)[]
Run Code Online (Sandbox Code Playgroud)

SELECT-ing 该polygons行返回一个不可读的二进制数据数组:

SELECT polygons FROM some_table WHERE id=405;
{0103000020E61000000100000006000000B84F039E5AC0E375243935C13F402...}
Run Code Online (Sandbox Code Playgroud)

st_AsText在第一个元素上使用会返回一个可读的输出:

SELECT st_AsText(polygons[1]) FROM some_table WHERE id=405;
POLYGON((-106.4689521119 31.7547183717742 ...)
Run Code Online (Sandbox Code Playgroud)

不出所料,该函数仅适用于元素,不适用于数组:

SELECT st_AsText(polygons) FROM some_table WHERE id=405;
ERROR:  function st_astext(geometry[]) does not exist
Run Code Online (Sandbox Code Playgroud)

用 Python 术语来说,我正在寻找print [st_AsText(p) for i in polygons]PostgreSQL 中的等价物。

如何在 SELECT 语句中对数组的所有元素运行 PostgreSQL 函数,就像 Python 的列表理解一样?

附录 我认为这不是严格的重复,因为How to apply a function to each element of an array column in Postgres?处理内联数组(例如FROM unnest(ARRAY[1.53224,0.23411234]) …

arrays postgresql postgis sql-function postgresql-9.3

4
推荐指数
1
解决办法
6877
查看次数

从表值函数返回表并在临时表中设置该值

我有一个表值函数.我还有一个标量值函数,我已经声明了一个临时表.我想在标量值函数内部执行表值函数,并在临时表中设置该值,如下所示

 **Exec @tempTable=TableValuedFunction**
Run Code Online (Sandbox Code Playgroud)

我怎么能这样做?

这是表值函数

ALTER FUNCTION [dbo].[fn_Functiont]()
RETURNS TABLE 
AS
RETURN 
(   
SELECT d.*, b.Name AS Name, ps.Name AS PaymentSystemName, c.UserName AS UserName, c.FirstName AS ClientFirstName, c.LastName AS LastName, c.Number AS DocumentNumber, c.Id
FROM Document AS d
JOIN System AS ps ON d.SystemId = ps.Id
JOIN Client AS c ON c.Id = d.ClientId
LEFT JOIN Shop AS b ON b.Id = d.ShopId
WHERE d.OperationTypeId IN (2, 4, 5) AND c.Type = 1
)
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server sql-function

4
推荐指数
1
解决办法
2682
查看次数

postgreSQL 中的 CASE 不允许使用返回集合的函数

我正在尝试运行此查询,直到不久前才能够运行。我不知道出了什么问题,我现在开始收到此错误?

Your database returned: ERROR: set-returning functions are not allowed in CASE Hint: You might be able to move the set-returning function into a LATERAL FROM item.

我的查询:

SELECT distinct
(CASE
WHEN {PERIOD} = 'Previous Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date AND pto.pto_end_date >= (date_trunc('quarter', now() - INTERVAL '1 month') + INTERVAL '1 month')::date
THEN generate_series(pto.pto_start_date, pto.pto_end_date, '2 day'::interval)
WHEN {PERIOD} = 'Current Quarter' AND pto.pto_start_date < (date_trunc('quarter', now() - INTERVAL '1 …
Run Code Online (Sandbox Code Playgroud)

sql postgresql sql-function generate-series chartio

4
推荐指数
1
解决办法
7047
查看次数

为什么 postgres 函数在一列中返回结果?

我有一个简单的 PostgreSQL 函数,我认为它应该将值返回到单独的列中-115,101000005458E6258...但它返回一列,其中两个值用逗号分隔-115,101000005458E6258...。我的功能出了什么问题?

CREATE OR REPLACE FUNCTION public.get_direction()
RETURNS TABLE(direction integer, geom geometry)             
AS $$
BEGIN
RETURN QUERY SELECT 
    heading-lag(heading) over (order by time) AS direction, a.geom AS geom 
    FROM public.mytable a 
    WHERE reg='125123' 
    GROUP BY heading, a.geom , a.time;
END; $$
LANGUAGE 'plpgsql';
Run Code Online (Sandbox Code Playgroud)

我调用该函数

SELECT public.get_direction();
Run Code Online (Sandbox Code Playgroud)

谢谢。

sql postgresql select sql-function set-returning-functions

4
推荐指数
1
解决办法
2035
查看次数

使用Spring jdbc执行Oracle Functions

我试图使用Spring jdbc执行Oracle函数.

但我收到了以下错误

CallableStatementCallback; bad SQL grammar [{? = call RATELIMIT_OWN.GET_LOGS(?, ?)}]; nested exception is java.sql.SQLException: ORA-06550: line 1, column 24: PLS-00653: aggregate/table functions are not allowed in PL/SQL scope ORA-06550: line 1, column 13: PLS-00382: expression is of wrong type ORA-06550: line 1, column 7: PL/SQL: Statement ignored 
Run Code Online (Sandbox Code Playgroud)

Sql函数

CREATE OR REPLACE FUNCTION RATELIMIT_OWN.Get_Logs ( p_yyyymm VARCHAR2, p_numec NUMBER )
    RETURN LOG_RECORD_TABLE PIPELINED IS

TYPE        ref0 IS REF CURSOR;
cur0        ref0;

out_rec     LOG_RECORD := log_record(NULL,NULL,NULL);

BEGIN

OPEN cur0 FOR …
Run Code Online (Sandbox Code Playgroud)

java oracle spring sql-function

3
推荐指数
1
解决办法
1986
查看次数

使用函数的SQL Server查询非常慢

这类是从前一个问题开始的:

SQL Server查询超时取决于Where子句

根据where子句,查询运行速度非常慢.我重写了该查询使用CTE并很好地避免了问题,但从未找到答案.

另外一个类似的查询最近被调整为添加另一个字段,突然它的性能从大约需要30秒才能运行并返回10,000行,超过10个小时(并最终返回相同的结果集).今天我开始对这个进行故障排除,发现了一些奇怪的东西.

我一直需要从datetime值中提取日期唯一部分,因此我将逻辑写入函数:

CREATE FUNCTION [dbo].[cDate] ( @pInputDate    DATETIME )
RETURNS DATETIME
BEGIN
        RETURN CAST(CONVERT(VARCHAR(10), @pInputDate, 111) AS DATETIME)
END
GO
Run Code Online (Sandbox Code Playgroud)

我发现在这个新的低效查询中,如果我用查询中的CAST(CONVERT(VARCHAR(10), @pInputDate, 111) AS DATETIME)内联替换了该函数,查询执行的速度从大约10小时降到了不到2秒.我看到估计的执行计划没有区别.顺便说一句,这不是添加的领域.我假设添加其他字段以某种方式导致执行计划改变并放大上述条件.

我的问题是,这是正常的吗?如上所述,我使用重复过程的函数,因为如果你找到一种更有效的方法,它们更容易维护,记忆和更新.我应该为我的功能做些什么来提高他们的表现吗?

sql t-sql sql-server performance sql-function

3
推荐指数
2
解决办法
6413
查看次数

如何在sql server中完成日期转换

我有一个像下面描述的查询.

select CAST(0x83360B00 AS Date)
Run Code Online (Sandbox Code Playgroud)

当我在SQL服务器中运行此查询时,我能够获得日期格式的结果:

2012年12月15日

我想知道的是这是如何产生的.提前致谢.

sql sql-server sql-function

3
推荐指数
1
解决办法
59
查看次数

How can i cut the left part of the string with unknown legth? (with sql function)

In the ETL process, I receive a varchar field, and the length (of the value) is changed from row to row. I need to keep 5 symbols from the right side of the string. It means that I need to cut the left side but I can't, due to the unknown length.

我已经尝试过select substring('24:15:11',4, 5),但是对我没有帮助,字符串可能是'2019-05-01 22:15:11'。

sql:

select substring('24:15:11',4, 5)
Run Code Online (Sandbox Code Playgroud)

预期:

15:11
Run Code Online (Sandbox Code Playgroud)

sql sql-function presto

3
推荐指数
1
解决办法
257
查看次数