标签: dynamic-sql

在oracle中动态创建和执行sql命令

我正在上一个数据库类,在该类的实验部分的开头,我们通常必须删除之前创建的数据库中的所有表.我希望能够运行一个动态执行此操作的脚本,但似乎无法使其工作.这是我到目前为止的代码.

declare tname string(50);
cursor ctable is select table_name from user_tables;

begin
 open ctable;
 LOOP
   FETCH ctable into tname;
   if tname != ''  then
     execute immediate 'drop table ' || tname;
   END if;
   EXIT WHEN ctable%NOTFOUND;
 END LOOP;
 close ctable;
end;
Run Code Online (Sandbox Code Playgroud)

如果有人可以指出我正确的方向,我做错了什么会很好.谢谢.

sql oracle plsql dynamic-sql cursor

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

如何在存储过程中将列作为参数传递?

如何传递和使用列名来检索实际列中的bigint变量?

DECLARE @personID BIGINT,
DECLARE @queryString varchar(500)

Set @queryString = 'Select @personID = ' + @PersonColumnID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
exec(@queryString)
Run Code Online (Sandbox Code Playgroud)

错误消息指出"必须声明变量'@personID'." 我也试过了

Set @queryString = 'Select ' + @personID + ' = ' + @witnessPersonID + ' from dbo.Loss_Witness where WitnessID = @witnessID'
Run Code Online (Sandbox Code Playgroud)

并收到错误消息"将数据类型varchar转换为bigint时出错".

有什么想法吗?

sql t-sql sql-server sql-server-2005 dynamic-sql

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

T-Sql动态查询字符串限制

我得到一个奇怪的例外,说""

Msg 203, Level 16, State 2, Line 53
The name 'SELECT 
        ISNULL(ESP.ID,-1) AS 'PayScaleID',
        ISNULL(E.Prefix,'') + ISNULL(E.SerialNo,0)   AS 'Token number',
        ISNULL(E.FirstName,'')+' '+ ISNULL(E.MiddleName,'')+' '+ISNULL(E.LastName,'') AS 'Employee name',   
        ISNULL(E.CostCentreCode,'') AS 'Cost centre code',
        ESP.TotalPresentDays AS 'Present days',
        ESP.TotalWeeklyOffDays AS 'Week offs',
        ESP.TotalPaidHolidays AS 'Paid holiDays',
        ESP.TotalAbsentDays AS 'Absent days',
        ESP.ArrearDays AS 'Arrear days',
        ESP.OTHours AS 'OTHours',
        ESP.TotalPaidAmount AS 'Total Amount',
        MAD.Name AS 'Allowance' ,
        X.Amount 
    INTO #temp
    FROM 
    (
        SELECT 
            -1 AS 'BillingI' is not a valid identifier."
Run Code Online (Sandbox Code Playgroud)

我正在执行以下查询."

{ …

sql t-sql dynamic-sql

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

将表和更改日志合并到PostgreSQL中的视图中

我的PostgreSQL数据库包含一个用于存储已注册实体实例的表.此表格通过电子表格上传填充.Web界面允许操作员修改所呈现的信息.但是,原始数据不会被修改.所有的改变都存储在一个单独的表changes与列unique_id,column_name,valueupdated_at.

更改完成后,首先查询原始表,然后查询更改表(使用实例ID和最新更改日期,按列名称分组),将其呈现给操作员.这两个结果在PHP中合并,并在Web界面上显示.这是执行任务的一种相当严格的方式,我想将所有逻辑保留在SQL中.

我可以使用以下查询轻松选择表的最新更改:

SELECT fltr_chg.unique_id, fltr_chg.column_name, chg_val.value 
FROM changes AS chg_val
JOIN ( 
      SELECT chg_rec.unique_id, chg_rec.column_name, MAX( chg_rec.updated_at )
      FROM information_schema.columns AS source
      JOIN changes AS chg_rec ON source.table_name = 'instances'
                             AND source.column_name = chg_rec.column_name
      GROUP BY chg_rec.unique_id, chg_rec.column_name
     ) AS fltr_chg ON fltr_chg.unique_id = chg_val.unique_id
                  AND fltr_chg.column_name = chg_val.column_name;
Run Code Online (Sandbox Code Playgroud)

instances表中选择条目同样简单:

SELECT * FROM instances;
Run Code Online (Sandbox Code Playgroud)

现在,如果只有一种方法可以转换前一个结果并将结果值替换为后者,基于unique_idcolumn_name,并且仍将结果保留为表格,则问题将得到解决.这可能吗?

我确信这不是最罕见的问题,而且很有可能,某些系统会以类似的方式跟踪数据的变化.如果不是通过上述方法之一(当前和寻求的解决方案),他们如何将它们应用于数据?

php postgresql dynamic-sql crosstab plpgsql

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

我的存储过程中存在错误

我的存储过程有问题

ALTER PROCEDURE [dbo].[TIGER_CREATE_RUNTIME_TABLE](@NOMBRE_TABLA varchar(100))
AS
    DECLARE @SQLQUERY1 AS NVARCHAR(600)
BEGIN
    SET @SQLQUERY1 = 'CREATE TABLE '+@NOMBRE_TABLA + '(
    SEGMENTO varchar(200) NULL,
    TCNFOL varchar(200) NOT NULL,
    TCCOPL_A varchar(200) NULL,
    ID_LIN_NEG varchar(200) NULL,
    TIP_LIN varchar(200) NULL,
    MON_ID_MONEDA varchar(200) NULL,
    LINEAS_FACT varchar(200) NULL,
    CF_VOZ varchar(200) NULL,
    CF_DATOS varchar(200) NULL,
    ADIC_MINS varchar(200) NULL,
    ADIC_LDN varchar(200) NULL,
    ADIC_LDI varchar(200) NULL,
    ADIC_SMS varchar(200) NULL,
    PAQ_SMS varchar(200) NULL,
    ADIC_DATOS varchar(200) NULL,
    OTROS varchar(200) NULL,
    SUB_TOT varchar(200) NULL,
    PERIODO_ANALISIS varchar(200) NULL,
    PERIODO_ALTA varchar(200) NULL,
    CATEGORIA varchar(200) NULL, …
Run Code Online (Sandbox Code Playgroud)

sql t-sql sql-server dynamic-sql

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

搜索多个表,并在结果行中显示表名

如何构造SQL语句以跨多个平面无关表运行,并使用select的结果和结果来自的表的名称显示结果.

这个场景是我有几个表中每个都有相同列名的表.我收集的是来自外部各方的数据,因为它存储在不同的表中.

相同的表格如下:

Table 1: pid, parent_name, student_name, student_number, class_name, columnN
Table 2: pid, previous_school, previous_school, student_number, columnN
Table 3: pid, student_name, student_number, parent_name, column4, columnN
Table 14: pid, student_number, parent_name, column4, columnN
Table N: pid, previous_school, parent_name, column4, columnN
Run Code Online (Sandbox Code Playgroud)

我需要一个student_name在所有表中搜索的SQL语句在伪代码中:for each table, find a student named john doe and return to me the row where you got the result and the table where you found the result

在以下演示文稿中给出结果:

john doe, Table 1, pid
john doe, Table …
Run Code Online (Sandbox Code Playgroud)

sql postgresql database-design dynamic-sql

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

为什么在这里使用立即执行?

我正在阅读专家 - oracle-database-architecture书.汤姆正在解释关于绑定变量的内容.

你能告诉我第一个程序和第二个程序有什么不同吗?根据我的理解,我们execute immediate用来执行动态SQL语句或匿名PL/SQL块.

这是目标表:

create table t ( x int ); 
Run Code Online (Sandbox Code Playgroud)

以下是过程#1的示例:

ops$tkyte%ORA11GR2> create or replace procedure proc_name1
2 as
3 begin
4   for i in 1 .. 10
5     loop
6       execute immediate
7         'insert into t values ( '||i||')';
8   end loop;
9 end;
10 /
Run Code Online (Sandbox Code Playgroud)

以下是过程#2的示例:

create or replace procedure proc_name2
 as
 begin
   for i in 1 .. 10
   loop
     insert into t values ( i);
   end loop;
 end;
Run Code Online (Sandbox Code Playgroud)

oracle performance plsql dynamic-sql

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

列出每个视图和表的行数

我有一个名为的数据库test,它在架构中具有2个视图和2个表,dbo如下所示: 示例数据库

我想创建一个表report,该表列出每个视图和每个表的行号。这个概念是这样的:

select table_name, table_type, "select count(*) from table_name" as rowCount
into test.dbo.report
from test.INFORMATION_SCHEMA.tables;
Run Code Online (Sandbox Code Playgroud)

test.dbo.report应如下所示:

在此处输入图片说明

但是,我不知道如何实现。动态SQL可能是解决之道,但有些令人困惑。

我正在使用SQL Server 2014。

sql-server dynamic-sql information-schema

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

动态SQL - 为什么变量保持为空

我有动态sql的问题(是的只有一个;))

在内存存储过程中,我声明了一个这样的局部变量

DECLARE @cmd nvarchar(max)在代码的后面我有这个行,我接收了很多输入参数(抱歉这个混乱没有成功组织它):

SET @cmd = 'INSERT INTO dbo.' + @ArchiveTableName + '(' + @ArchiveFieldsName + ',' + @ArchiveEntityMainIdentifierField + ')
    SELECT ' + @EntityFieldsName + ',' + '' + @EntityMainIdentifierField + '' +
       ' FROM [' + @OrganizationName + '].[dbo].[' + @EntityName + '] ent
        left join dbo.' + @ArchiveTableName + ' arc on arc.' + @ArchiveEntityMainIdentifierField + ' = ent.' + @EntityMainIdentifierField + '
        where ent.' + @EntityMainIdentifierField + ' = ''' + @ParentId + ''' …
Run Code Online (Sandbox Code Playgroud)

sql sql-server dynamic-sql

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

WHERE子句基于列值的运算符

我想有一个包含值来比较表操作员使用(=,!=,~,!~等).例如:

CREATE TABLE rule (
    value1 varchar NOT NULL,
    op1 varchar NOT NULL,
    value2 varchar NOT NULL,
    op2 varchar NOT NULL,
    ...
);
Run Code Online (Sandbox Code Playgroud)

我想要的可以使用这个伪代码来描述:

SELECT * FROM rule WHERE value1 op1 ?;
Run Code Online (Sandbox Code Playgroud)

在示例中,我将操作符存储在单独的列中,但我对其他解决方案持开放态度.

sql postgresql dynamic-sql where-clause

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