标签: sql-function

Oracle 函数编译成功但在执行 PLS-00221 时抛出错误:不是过程或未定义

我有简单的 oracle 功能

create or replace function abs.test_func(test_in in number)
return number
is
   test_out number ;
BEGIN
test_out:=test_in;
RETURN test_out;
END;
Run Code Online (Sandbox Code Playgroud)

如果我编译它 - 它编译成功。但是当我从 PLSQL Developer SQL Window 运行时

 BEGIN abs.test_func(5); END;
Run Code Online (Sandbox Code Playgroud)

我收到以下错误

ORA-06550: line1, column8;
PLS-00221: 'TEST_FUNC' is not a procedure or is undefined
ORA-06550: line1, column8;
PL/SQL: Statement ignored
Run Code Online (Sandbox Code Playgroud)

我的功能有什么问题?

sql oracle plsql stored-procedures sql-function

2
推荐指数
1
解决办法
70
查看次数

我可以直接在MySQL下的SQL中运行HTTP GET吗?

我喜欢这样做:

UPDATE table SET blobCol = HTTPGET(urlCol) WHERE whatever LIMIT n;
Run Code Online (Sandbox Code Playgroud)

有代码可以这样做吗?我知道这应该是可能的,因为MySQL Docs包含添加执行DNS查找的功能的示例.

MySQL/windows /最好不用编译东西,但我可以.

(如果你还没有听说过这样的事情,但是如果它确实存在的话,你会期望你会有这样的事情,"原则上不是"会很好.)

编辑:我知道这将打开一个完整的can-o-worms安全性,但在我的情况下,唯一访问数据库是通过mysql控制台应用程序.它不是一个世界可访问的系统.它不是网络后端.它只是一个本地数据记录系统

mysql http-get sql-function

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

在SQL中的Table-returned-function中使用if语句的问题

我已将我的功能简化为以下内容:

create function [dbo].[UserSuperTeams](@ProjectId int) 
returns table 
as 
return 
   if @ProjectId=0
   begin 
      select TeamId from TblTeam t 
        union
      select 0 as TeamId
   end
   else
   begin
      select t.TeamId from TblTeam t
        union
      select 1 as TeamId
   end;
go
Run Code Online (Sandbox Code Playgroud)

我无法使它工作..似乎我有一些语法错误,但我无法弄清楚如何让它工作..任何想法?

sql sql-server sql-function

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

SQL Server通过JDBC实现FIRST功能

我正在构建一个具有SQL Server数据库连接的冷融合应用程序.我需要组记录,只返回组中的第一个.我在coldfusion中写了以下查询.

SELECT FIRST(ID)
FROM table
GROUP BY NAME
Run Code Online (Sandbox Code Playgroud)

哪个返回以下错误:

[Macromedia] [SQLServer JDBC Driver] [SQLServer]'first'不是公认的内置函数名.

这是一种在coldfusion查询中使用第一个函数的方法吗?

有没有其他方法可以实现这一目标?

*我没有直接访问数据库的权限.只需访问冷聚变数据连接

sql-server coldfusion cfquery jdbc sql-function

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

PostgreSQL递归函数返回记录集

我正在写一个PostgreSQL递归函数,它返回一组记录,但我不知道它的正确语法.这里的递归表是Vertical,其中包含以下列:

CREATE TABLE vertical
(
  id serial NOT NULL,
  name character varying(100) NOT NULL,
  insert_timestamp timestamp without time zone NOT NULL DEFAULT now(),
  deleted smallint NOT NULL DEFAULT 0,
  parent_id integer, // refer to another Vertical
  locations character varying(200),
  level smallint NOT NULL DEFAULT 1,
  CONSTRAINT vertical_pkey PRIMARY KEY (id ),
  CONSTRAINT vertical_parent_fkey FOREIGN KEY (parent_id)
      REFERENCES vertical (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION,
  CONSTRAINT name_ukey UNIQUE (name )
)
Run Code Online (Sandbox Code Playgroud)

这是我的SQL语句(通过指定的id获取Vertical的所有子项):

CREATE FUNCTION getAllVerticalChilds(verticalId integer) …
Run Code Online (Sandbox Code Playgroud)

postgresql recursion sql-function

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

MySQL函数向DATETIME添加一些工作日

我需要一个MySQL函数,它允许我通过一些工作日(星期一到星期五)和开始DATE或DATETIME(对我的实现无关紧要),并让它返回一个新的DATE或DATETIME,许多工作日在将来.

示例:SELECT AddWorkDays(10, "2013-09-01")返回"2013-09-16",假设"2013-09-01"是星期一.

同样:SELECT AddWorkDays(-10, "2013-09-16")返回"2013-09-01"

我发现这个函数用于MSSQL数据库(我认为)正是我需要的,除了它不在MySQL中.我尝试手动将其转换为MySQL语法并实现了这一点:

DROP FUNCTION IF EXISTS AddWorkDays;
DELIMITER $$
CREATE FUNCTION AddWorkDays
(
    WorkingDays INT,
    StartDate DATE
)
RETURNS DATE

BEGIN
    DECLARE Count INT;
    DECLARE i INT;
    DECLARE NewDate DATE;
    SET Count = 0;
    SET i = 0;

    WHILE (i < WorkingDays) DO
        BEGIN
            SET Count = Count + 1;
            SET i = i + 1;
            WHILE DAYOFWEEK(ADDDATE(StartDate, Count)) IN (1,7) DO
                BEGIN
                    SET Count = Count + …
Run Code Online (Sandbox Code Playgroud)

mysql sql sql-function

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

内连接vs存储过程或函数sql server

我有这个架构:

在此输入图像描述

当我想显示Attend表格时,而不是DoctorId和PatientId,显示员工姓名和患者姓名.

像这样:

  • ID
  • 患者姓名
  • 医生姓名[==员工姓名]
  • 开始
  • 结束

第一种方法是使用内连接:

select 
   a.Id, p.Name, a.Name, a.Start, a.End 
from 
   Patient as p  
inner join 
   (select 
       e.Name, at.Id, at.Start, at.End, at.PatientId
    from 
       Attend as at  
    INNER JOIN 
       Employee as e on at.DoctorId = e.Id) as a on p.Id = a.PatientId
Run Code Online (Sandbox Code Playgroud)

第二种方法是使用函数或存储过程 - 发送id和返回名称

 select 
    a.Id, 
    FindDoctor(a.DoctorId) as Doctor, 
    FindPatient(a.PatientId) as Patient, 
    a.Start, a.EndTime 
 from  
    Attend AS a
Run Code Online (Sandbox Code Playgroud)

哪个更好?哪种是优化方法?

sql stored-procedures inner-join sql-function

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

如何在SQL Server中自动将YES/NO转换为BIT?

我想在SQL Server中覆盖系统定义的转换.那可能吗.

问题陈述

我有一个大的csv文件来上传数据库中的数据.有一个列BIT类型包含True/False,Yes/No,1/0

当我使用批量插入时True/False,'1/0'将被视为正确的值,但Yes/No(如预期的那样)将引发转换错误.

有没有办法转换Yes/No没有任何循环或逐个值?

编辑

自定义数据类型 PanelMemberType

CREATE TYPE [dbo].[PanelMemberType] AS TABLE(
 [Email] [nvarchar](255) NOT NULL,
 [LocationName] [nvarchar](255) NOT NULL,
 [OptInPermission] [nvarchar](255) NOT NULL
)
GO
Run Code Online (Sandbox Code Playgroud)

存储过程代码:

ALTER PROCEDURE [dbo].[PanelMemberBulkUpdate]
     @tblPanelMember PanelMemberType READONLY, 
     @PanelID int, 
     @UserID nvarchar(128)
AS
BEGIN
     SET NOCOUNT ON;

     MERGE INTO PanelMember p1
     USING @tblPanelMember p2 ON p1.Email= p2.Email

     WHEN MATCHED THEN
         UPDATE SET  
             p1.PanelID = @PanelID,
             p1.LocationID = (SELECT TOP(1) [LocationID] …
Run Code Online (Sandbox Code Playgroud)

database sql-server sql-function

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

在SQLAlchemy查询中使用诸如substr(X,Y,Z)之类的SQL函数

我不知道如何将SQLite的函数(例如substr(X,Y,Z))与SQLAlchemy的查询表达式语法一起使用。我知道我可以使用原始查询,但这会使重用where子句更加困难。这是我的用例:

我有一个文件头表(或模型类),可以查询该表以识别和列出某些类型的文件。

class Blob(Base):
    __tablename__ = 'blob'

    _id = Column('_id', INTEGER, primary_key=True)
    size = Column('size', INTEGER)
    hash = Column('hash', TEXT)
    header = Column('header', BLOB)
    meta = Column('meta', BLOB)
Run Code Online (Sandbox Code Playgroud)

例如,要识别Exif图像,我可以使用以下原始查询:

select * from blob where substr(header,7,4) = X'45786966'
Run Code Online (Sandbox Code Playgroud)

X'45786966'只是使用ASCII编码BLOB的字符串的SQLite 文字Exif。实际上,where子句更加复杂,我想将它们用作联接的过滤条件,大致如下:

# define once at module level
exif_conditions = [functions.substr(Blob.header, 7, 4) == b'Exif']

# reuse for arbitrary queries
session.query(Blob.hash).filter(*exif_conditions)
session.query(...).join(...).options(...).filter(condition, *exif_conditions)
Run Code Online (Sandbox Code Playgroud)

有没有办法用SQLAlchemy做到这一点?

python sqlite sqlalchemy sql-function

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

使用SUM进行GROUP BY而不删除空(null)值

表:

玩家

player_no   | transaction_id
----------------------------
1           | 11
2           | 22
3           | (null)
1           | 33
Run Code Online (Sandbox Code Playgroud)

交易

id            | value   |
-----------------------
11            | 5
22            | 10
33            | 2
Run Code Online (Sandbox Code Playgroud)

我的目标是获取所有数据,维护所有玩家,即使null是以下查询中的值:

SELECT p.player_no, COUNT(p.player_no), SUM(t.value) FROM Players p 
INNER JOIN Transactions t ON p.transaction_id = t.id 
GROUP BY p.player_no
Run Code Online (Sandbox Code Playgroud)

然而,结果省略了空值,例如:

player_no | count  | sum
------------------------
1         | 2      |  7
2         | 1      |  10
Run Code Online (Sandbox Code Playgroud)

我想提到的是空值:

player_no | count  | sum
------------------------
1         | …
Run Code Online (Sandbox Code Playgroud)

sql group-by sql-function querydsl

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