我想弄明白为什么OPEN CURSOR FOR会允许SELECT而不允许UPDATE/INSERT
例如:
create table users( name varchar2(100) );
declare
cur sys_refcursor;
begin
open cur for 'insert into users values (''Sean'')';
dbms_sql.return_result( cur );
end;
返回
OPEN的目标必须是查询
==编辑:更多信息
我试图创建一个处理内联SQL的proc,我希望它能
我正在学习SQL /SQL,我在SQL命令行中启动了这个查询
SELECT DNAME, CURSOR(SELECT SALARY, COMMISSSION_PCT
FROM EMP e
WHERE e.did=101)
from dept d
order by dname;
DNAME
--------------------------------
我正在尝试使用VBA连接到MS数据库和ADODB。当我运行一个查询时,我总是得到-1,应该是1。我使用*.uld测试文件检查连接,并找到OK。请帮帮忙。
Private Sub Form_Load()
Dim sql As String
Dim recdData As New ADODB.Recordset
Dim sirb As String
sirb = "12345"
sql = "SELECT * FROM sirb_registration WHERE sirb = '" & sirb &
在SQL Server中,我使用跟随SQL找到一个打开的游标,并在一个'catch‘块中关闭它。
IF EXISTS(SELECT 1 FROM sys.dm_exec_cursors(@@SPID) WHERE [name] = 'Crsr_IDs' AND IS_OPEN = 1)
BEGIN
CLOSE Crsr_IDs
DEALLOCATE Crsr_IDs
END
以类似的方式,如何在Postgres中找到一个在异常块中具有特定名称的打开游标并关闭它?
我试图在Outlook中创建一些自定义按钮,这些按钮与Access数据库中包含的表进行交互。到目前为止,我的按钮在Outlook中工作,运行的代码实例化了一个自定义数据访问类,该类负责打开和关闭到数据库的连接。据我所知,这很管用。
但是,在这个类中,我甚至不能执行简单的select查询。有人能帮我理解为什么下面的代码不起作用吗?我总是以没有行的记录集结束,但是如果我使用Access查询设计器运行相同的sql,它就能正常工作。
Public Function GetJobID(ByVal xEmailID As String) As Integer
'Returns the JobID
我不熟悉这些oracle动态查询,我只是想构建一个动态查询,这样我就可以根据它来获取记录。
下面是我的PL/ SQL语句:
declare
sql_query varchar2(5000) := 'select FKOM_OFFICE_ID,FKBAM_BUDGET_ID ';
begin
for x in (select distinct PFS_SOURCE_ID,PFS_SOURCE_ENG from PBS_FC_SOURCE WHERE PFS_UPPER_SOURCE_ID!=0 ORDER BY PFS_SOURCE_ID ASC )
loop
sql_q
我有emp表,因为没有记录。我在SQL和PL/SQL块中使用了这些表
SQL> BEGIN
2 FOR i IN (SELECT * FROM emp WHERE 1=2) -- emp table having no data
3 LOOP
4 dbms_output.put_line('Done');
5 END LOOP;
6 EXCEPTION
7 WHEN no_data_found THEN
8 dbms_output.put_line('No such value');
9
我用PL/SQL编写了一个简单的存储过程,以执行相当于
SELECT * FROM tablename
以下是返回引用游标的过程
create or replace
procedure proc_name (outVal OUT sys_refcursor) as
myCursor sys_refcursor;
myRecords records%ROWTYPE;
l_sql VARCHAR(2000);
begin
l_sql := 'SELECT * FROM RECORDS';
open myCur
我不知道有多少是正确的
DECLARE
CURSOR cur_depts IS
SELECT *
FROM dept;
BEGIN
FOR i IN cur_depts
LOOP
INSERT INTO dept_backup
VALUES(i);
END LOOP;
CLOSE cur_depts;
END;
这就是我遇到的错误
Error report -
ORA-06550: line 8, column 20:
PL/SQL: ORA-00947: not enough values
ORA-
Oracle存储过程:
create or replace PROCEDURE "TGT_MPD_PLANOGRAM_SEL_SP" (
POG_NUM_IN IN VARCHAR2,
PLAN_DATA_SEL_CUR OUT SYS_REFCURSOR,
SQL_CODE_OUT OUT NUMBER,
SQL_ERR_MSG_OUT OUT VARCHAR2)
AS
...
Mapper.xml
<select id="getPlanograms" statementType="CALLABLE"
就查询性能而言,哪一个更有效?
考虑到T是一个表,PK是表T中的主要键。它们是不同的还是只是一个选择的问题?
select col1, col2 into :var1, :var2
from T
where PK = a
...or:
EXEC SQL声明用于选择col1、col2的aCursor游标为:var1,:var2来自T,其中PK = a;EXEC SQL开放aCursorEXEC aCursor
我认为,如果可以直接检索单个行,那么声明一个游标来从基于主键的表中获取单个行就没有意义了。
我在Server和Oracle上都编码。
当我在Server中编码时,我使用了以下内容:
OPEN curUSERS;
CLOSE curUSERS;
DEALLOCATE curUSERS;
现在,当我在Oracle中编码时,我使用了以下内容:
OPEN curUSERS;
CLOSE curUSERS;
我在PL/SQL中看到了一个DEALLOCATE关键字,但是当我使用这个语句时
DEALLOCATE(curUSERS);
它抛出一个错误。我如何在PL/SQL中做同样的事情(去分配)?
我有一个查询,它使用游标循环显示select语句的结果。
简而言之,select语句从我拥有的映射表中选择所有记录。其中一列是“SourceTableName”。
我使用这个字段来生成一些动态SQL。
我希望在我的存储过程中添加一个参数,如果我传入一个'SourceTableNameFilter‘,它将允许我只为我想要的'SourceTableName’创建动态SQL。
我被一些包装我的动态SQL的逻辑所困扰。
IF @SourceTableNameFilter(SP参数)=@SourceTableName(来自映射表) BEGIN
生成并执行一些基于SourceTableNa
我有这样的代码
DBConnection.EnsureConnectionToDB()
private static OracleConnection con;
public static OracleConnection EnsureConnectionToDB()
{
if (con == null)
con = new OracleConnection();
if (con.State != ConnectionState.Open)
{
con.Connection
如何在Teradata中定义没有游标的FOR循环?
实际上我的代码是这样的:
CREATE PROCEDURE TEST1()
BEGIN
DECLARE VAR1 VARCAHR(200);
DECLARE VAR2 VARCAHR(200);
FOR FOR_LOOP1 AS CUR_NAME CURSOR FOR
DO
---------SQL STATEMENT-------
FOR FOR_LOOP2 AS CUR_NAME1 CURSOR FOR
DO
---------SQL STATEMENT-------
END FOR;
END FOR;
END;
我需要在Teradat
需要更新服务器上的所有数据库,并在每个数据库上执行相同的逻辑。有问题的数据库都遵循一个通用的命名方案,如CorpDB1、CorpDB2等。我没有为每个有问题的数据库(超过50个)创建SQL代理作业,而是考虑使用游标遍历数据库列表,然后在每个数据库上执行一些动态sql。根据游标应该是最后一招的普遍概念,是否可以为了更好的性能而重写游标,或者以另一种方式编写游标,比如使用未记录的?
DECLARE @db VARCHAR(100) --current database name
DECLARE @sql VARCHAR(1000) --t-sql used for processing on ea
MariaDB文档提到,SQL标准从来不允许子查询(派生表)中的ORDER BY子句。
表示SQL查询。
SELECT
field1
, field2
FROM (
SELECT
field1
, field2
FROM
table1
ORDER BY field2
) alias
不被SQL标准所允许。
根据SQL标准,“表”(以及FROM子句中的子查询)是一组无序的行。表中的行(或FROM子句中的子查询中的行)不按任何特定顺序排列。这就是为什么优化器可以忽略您指定的ORDER子句的原因。实际上,SQL标准甚至不允许ORDER子句出现在这个子
为了获得动态列,我一直试图创建创建动态查询的PL/SQL语句。由于我对这些Oracle /SQL语句不太了解,所以我对一些事情感到困惑。
是否必须有存储过程来创建动态查询?
下面的查询不会抛出任何错误,甚至不会导致任何结果。在下面的查询中,我要做的是根据FKBAB_SOURCE_ID ( PFS_SOURCE_ID.的外键)获取FKOD_AMOUNT的和
declare
sql_query varchar2(3000) := 'select FKOM_OFFICE_ID,FKBAM_BUDGET_ID ';
begin
for x in