我们的应用程序将信息从oracle存储过程传递到oracle .net提供程序的标准方法是通过out ref cursor参数.
在过去,我们所有的存储过程都在包中,并且具有以下内容:
CREATE OR REPLACE PACKAGE test_package IS
TYPE refcur IS REF CURSOR;
PROCEDURE get_info ( o_cursor OUT refcur );
END test_package;
/
CREATE OR REPLACE PACKAGE BODY test_package IS
PROCEDURE get_info ( o_cursor OUT refcur ) AS
BEGIN
OPEN o_cursor FOR
SELECT * FROM v$database;
END get_info;
END test_package;
/
Run Code Online (Sandbox Code Playgroud)
现在我想将get_info过程从包中移出并进入常规过程,但不知道如何获取refcur类型.如何在包范围外创建它?
创建或替换类型refcur是REF CURSOR;
不起作用.
我有一个显示联系地址的mdi表格.由于它是Mdi,我可以打开表格的多个副本.然而,显然所使用的变量在表格中被"复制".因此,在下面的代码中,ContactTypeId将具有基于创建的最后一个表单的值.
implementation
uses DataModule, MainForm;
{$R *.dfm}
var ModuleUserLevel, ContactId, ContactTypeId : Integer;
EditMode, EditAccess, AddAccess, DeleteAccess : Boolean;
ContactName : String;
constructor TContactDetailsFrm.Create(AOwner:TComponent; InContactTypeId, InContactId : Integer);
Begin
Inherited Create(AOwner);
ContactId := InContactId;
ContactTypeId := InContactTypeID;
End;
Run Code Online (Sandbox Code Playgroud)
我怎么能避免这个?
提前致谢
假设我有一个叫做的函数l:
l <- function(x) x + 1
Run Code Online (Sandbox Code Playgroud)
然后定义另一个函数,m但在其中m,重新定义l:
m <- function() {
l <- function(x) x*2
l(10)
}
m()
Run Code Online (Sandbox Code Playgroud)
为什么要m回来x*2,而不是x+1?
几年后回到此帖子,以添加另一个警告:不要这样做
我正在尝试在全局环境中存储来自函数的变量,但是我发现SO post或其他SO post都不适合我的解决方案。这是一个极其简化的示例,用于说明我的问题。我不能只使用<<-使成为v全局变量,因为我的实际函数创建了几十个变量。
代码(main_file.R)
source("function_me.R")
#environment(doGlobalThing) <-parent.frame(2) #didnt work
doGlobalThing()
v #cant get to this var from the global environment
Run Code Online (Sandbox Code Playgroud)
代码(function_me.R)
doGlobalThing<-function(){
#eval(v<-'hi',env=parent.frame(2)) #tried this, didnt work
v<-'hi'
}
Run Code Online (Sandbox Code Playgroud) 在下面的代码中,2打印出来.
int x = 1;
int f(int y)
{
return x;
}
int main() {
x = 2;
printf("%d", f(0));
}
Run Code Online (Sandbox Code Playgroud)
如果我们在C中有静态作用域,它会怎么样?为什么不1打印?
印花 2在这种情况下不是动态范围,是吗?
我认为在静态作用域中它应该使用最近的x到函数定义.
我有一个利用连接到 Amazon RDS 的 RMySQL 库的 R 脚本。该脚本最初会在运行该函数之前连接到 RDS。在函数内部,查询RDS上的MySQL,然后执行Sys.sleep命令,持续24小时(86400秒),然后恢复。因为 Amazon 的 RDS wait_timeout 参数设置为 8 小时 (28800),这会导致我的 R 控制台中出现此错误:
Error in .local(conn, statement, ...) :
could not run statement: MySQL server has gone away
Run Code Online (Sandbox Code Playgroud)
我不能这样做,所以我尝试了以下代码:
duration <- 86400
con <- dbConnect(MySQL(),
user = passwordFile$user[1],
password = passwordFile$password[1],
host = passwordFile$host[1],
dbname = passwordFile$dbname[1])
query <- function(...) dbGetQuery(con, ...)
testing <- function(){
test1 <- query("SELECT * FROM a_log")
print(test1)
dbDisconnect(con)
Sys.sleep(duration)
con <- dbConnect(MySQL(),
user = passwordFile$user[1],
password = passwordFile$password[1],
host …Run Code Online (Sandbox Code Playgroud) 我正在使用 angular 和 firestore。我正在检查 firestore 中我的路线守卫的价值。
我发现在页面刷新时,它返回为未定义。但是,如果我只是硬编码 true 或 false 的返回,它就可以工作。
我的 if 语句中的任何日志总是正确返回,但由于某种原因似乎没有更新我的全局变量。
如果我使用我的网站导航返回根目录并浏览我的网站,它可以正常工作。但是,当我刷新页面时,它返回为未定义。
这可能是一个范围界定问题吗?
路线守卫
import { Injectable } from '@angular/core';
import { ActivatedRouteSnapshot, RouterStateSnapshot, CanActivate, Router } from '@angular/router';
import { AuthService } from './auth.service';
import { AngularFirestore, AngularFirestoreCollection, AngularFirestoreDocument } from 'angularfire2/firestore';
import { Subscription } from 'rxjs/Subscription';
//testing
import { Observable } from 'rxjs/Observable';
import { AngularFireAuth } from 'angularfire2/auth';
@Injectable()
export class CheckBillingService implements CanActivate {
private _subscription: Subscription;
private userBillingDocRef: AngularFirestoreDocument<any>;
userBilling: Observable<any>; …Run Code Online (Sandbox Code Playgroud) javascript scoping typescript angular google-cloud-firestore
我想知道在java中是否可以声明一个变量本地的变量来执行该方法.
例如,如果我正在做一些递归的东西,我想保持特定于该方法的一个特定执行的各种计数器.
我不知道那个正确的英语表达......
我想编写一个静态实用程序类,它只有一组属性,向用户公开功能
例如我可以打电话:
Utils.String.GetHexString("Hello World");
Run Code Online (Sandbox Code Playgroud)
要么
Utils.Stream.CopyBytes(instream, outstream);
Run Code Online (Sandbox Code Playgroud)
我可以把它比作最接近的是System.Text.Encoding,其中有UTF8,ASCII等属性,所以你可以这样调用:
Encoding.UTF8.GetBytes("Hello World");
Run Code Online (Sandbox Code Playgroud)
要么
Encoding.ASCII.GetBytes("Hello World");
Run Code Online (Sandbox Code Playgroud)
问题是在Encoding中,这会调用用户公开可用的等效对象(UTF8Encoder,ASCIIEncoder).我想要的是仅通过Utils公开对象,而不会看到与属性相关的对象,例如
我可以打电话:
Utils.Stream.CopyStream(instream, outstream);
Run Code Online (Sandbox Code Playgroud)
但我不能打电话:
StreamUtils.CopyStream(instr, outstr) //This class is only accessible via the Utils class!
Run Code Online (Sandbox Code Playgroud)
这是可能的,如果是这样的话,这样做是好还是坏?
我试图理解ES6词法范围(使用节点运行时).考虑以下:
'use strict';
let x = 10;
function f() {
console.log(x);
console.log(y); // This should crash
}
let y = 5;
f();
Run Code Online (Sandbox Code Playgroud)
从O'Reilly的书"学习Javascript"中解释:
词法作用域意味着您定义函数的范围内的任何变量(与您调用它时相反)都在函数的范围内.
但是,当我运行此程序(通过节点)时,它输出:10 5
是不是调用console.log(y)打破了这里的词法范围规则?如果没有,为什么不呢?
编辑:为了将来参考,似乎教科书的作者(Learning Javascript 3rd Edition O'Reilly)最近在"已确认的勘误表"中将此示例列为错误.在http://www.oreilly.com/catalog/errata.csp?isbn=0636920035534