我有一个专栏,比如PROD_NUM,其中包含一个用零填充的"数字".例如001004569.它们都是九个字符长.
我不使用数字类型,因为对数字的正常操作对这些"数字"没有意义(例如PROD_NUM*2没有任何意义.)并且因为它们的长度都相同,所以列定义为CHAR(9)
CREATE TABLE PRODUCT (
PROD_NUM CHAR(9) NOT NULL
-- ETC.
)
Run Code Online (Sandbox Code Playgroud)
我想约束PROD_NUM所以它只能包含九位数.没有空格,除了'0'到'9'之外没有其他字符
ConcurrentLinkedDeque和ConcurrentLinkedQueue的 Api链接:
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedDeque.html
http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ConcurrentLinkedQueue.html
两者有什么区别?
第一个,DeQueue有更多的方法,但两者之间的根本区别是什么?
我希望能够在访问变量之前测试变量是否已定义.
我喜欢有一个指定"调试级别"的全局.如果调试级别为0,则不会给出额外的输出.当大于1时,给出调试输出,更大的数字更详细.
我还想设置它以便程序运行,如果我没有定义它,则假设级别为0.有点像:( defined?魔法在哪里,我不知道怎么办?
(if (and (defined? debug-level) (> debug-level 1))
(diplay "Some debugging info"))
Run Code Online (Sandbox Code Playgroud)
我查看了The Scheme Programming Language,4th Edition中的表单摘要.我认为唯一可能的是identifier?.那没起效.
我正在使用SISC 1.16.6(索赔R5RS合规)和Chez Petite Scheme v8(索赔R6RS合规)
编辑我尝试eval用guard类似的包装:
(guard (x (else #f)) (eval 'debug-level))
Run Code Online (Sandbox Code Playgroud)
自'debug-level引用以来,它可以被评估并传递给eval.然后当eval试图评估它时,会发生错误,我希望guard会发现错误.它没有.
编辑2我意识到我想将调试跟踪包装成一个单独的过程,并且定义该过程的文件也可以debug-level使用默认值0 定义.使用单独过程的原因是降低过程中的行数这工作,并允许重新定向调试输出,如果需要.
我在互联网上找到的一些文章比较了ISNULL和COALESCE,所以我认为我的问题有点不同.
我想知道哪个性能更好?
SELECT * FROM mytable WHERE mycolumn IS NOT NULL AND mycolumn <> '';
Run Code Online (Sandbox Code Playgroud)
要么
SELECT * FROM mytable WHERE COALESCE(mycolumn,'') <> '';
Run Code Online (Sandbox Code Playgroud)
除了表现,在决定时我还应该考虑其他问题吗?
编辑:
我正在使用Teradata.
我记得曾经看过[Srinivasa Ramanujan],当他在Putney生病时.我曾乘坐1729号出租车,并说这个数字对我来说相当沉闷,我希望这不是一个不利的预兆."不,"他回答说,"这是一个非常有趣的数字;它是以两种不同方式表达的两个立方体之和的最小数字." [GH Hardy在"1729(号码)"中说道]
在"数学愤怒"中,约瑟夫·塔尔塔科夫斯基谈到了这一壮举,"那又怎么样?给我两分钟和我的计算器表,我会做同样的事情而不会施加任何小灰色细胞." 我不知道Tartakovsky先生将如何在计算器手表上完成该证明,但以下是我的方案函数,它枚举从1开始的数字,当它找到一个可以通过求和的多维数据集的两个单独方式表达的数字时停止两个正数.并且它的契约返回1729年.
有两个方面我会赞赏改进建议.一个领域是,对计划,风格和习语不熟悉.另一个区域是围绕计算.Sisc不会返回根的确切数字,即使它们可以.例如,(expt 27 1/3)产量为2.9999999999999996.但是当确定一个确切的数字,(expt 3 3)收益率时,我确实得到了确切的结果27.我的解决方案是获得立方根的确切底面,然后测试地板的立方体和地板的立方加一,如果匹配则计算为匹配.这个解决方案看起来很混乱,难以推理.有更简单的方法吗?
; Find the Hardy-Ramanujan number, which is the smallest positive
; integer that is the sum of the cubes of two positivie integers in
; two seperate ways.
(define (hardy-ramanujan-number)
(let ((how-many-sum-of-2-positive-cubes
; while i^3 + 1 < n/1
; tmp := exact_floor(cube-root(n - i^3))
; if n = i^3 + tmp^3 or n = i^3 + (tmp + …Run Code Online (Sandbox Code Playgroud) 我对此感到很沮丧.我正在尝试针对具有递归关系(分层)的表编写查询(使用Oracle),并获取存储在树中每个节点下方的另一个表中的记录总数.另一个表只有与叶节点相关的记录.但是,我希望得到树中每个节点及其下方的总计.例如,假设我有两张桌子.DIRS包含目录名称和标识目录结构的递归关系,FILES包含带有DIRS外键的文件信息,指示文件所在的目录:
DIRS
====
DIR_ID
PARENT_DIR_ID
DIR_NAME
FILES
=====
FILE_ID
FILE_NAME
DIR_ID
FILE_SIZE
Run Code Online (Sandbox Code Playgroud)
如果DIRS包含:
DIR_ID PARENT_DIR_ID DIR_NAME
====== ============= ========
1 ROOT
2 1 DIR1_1
3 1 DIR1_2
4 2 DIR2_1
5 2 DIR2_2
Run Code Online (Sandbox Code Playgroud)
和FILES包含
FILE_ID FILE_NAME DIR_ID FILE_SIZE
======= ========= ====== =========
1 test1.txt 5 100
2 test2.txt 5 200
3 test5.txt 5 50
4 test3.txt 3 300
5 test4.txt 3 300
6 test6.txt 4 100
Run Code Online (Sandbox Code Playgroud)
我想要一个返回路径的查询以及层次结构中每个节点中或下面的文件数.基本上是文件数量的汇总.所以查询结果看起来像这样:
Path File_Count
===== ===========
/ROOT 6
/ROOT/DIR1_1 4
/ROOT/DIR1_1/DIR2_1 1
/ROOT/DIR1_1/DIR2_2 3
/ROOT/DIR1_2 …Run Code Online (Sandbox Code Playgroud) 出于某种原因,当我在一个大表(4000万〜记录)上尝试CTAS(创建表为select)时,我在v $ session 18中看到了我的sql语句的活动会话.
当我试图暗示优化器使用更少的CPU时
create table table_name parallel (degree 2) as
select * from large_table;
Run Code Online (Sandbox Code Playgroud)
我看到6个活跃的会话.
学位3我看到8个活跃的课程.我尝试了学位默认,但它也创造了18个课程.
以前在代码中,在执行CREATE TABLE语句之前,我在会话中更改了一些属性:
alter session set workarea_size_policy = manual;
alter session set hash_area_size = 1048576000;
Run Code Online (Sandbox Code Playgroud)
我想在1个会话中创建表,我该怎么做?
谢谢 !
只想看看是否有人能更好地完成我所需要的。
首先是背景。我的数据库中有一个表,当前有大约20,000行。在表中,我们有一列用于名字和姓氏。还有一个列是ReferenceID。每个ReferenceID可以有多个FirstName,LastName组合。
这意味着当我们从表中执行select *时,我们为每个ReferenceID返回了多行(因为每个用户都有一行)。
我想同时将这两列连接到一个名为Name的列中,同时将ReferenceID的每一行都变成一个。(基本上是将数据展平)。
让我尝试在此处绘制一个ASCII图。
TABLE
ID ReferenceID FirstName LastName
________________________________________________
1 1 Mike Ekim
2 1 Tom Mot
3 1 Pete Etep
4 2 Ryan Nayr
5 3 Jerry Yrrej
Run Code Online (Sandbox Code Playgroud)
所以我想要的最终结果是
RESULT SET
ReferenceID Name
__________________________________
1 Mike Ekim, Tom Mot, Pete Etep
2 Ryan Nayr
3 Jerry Yrrej
Run Code Online (Sandbox Code Playgroud)
我真正需要知道的是,在我开始使用COALESCE并尝试调整结果之前,是否有更好的方法来实现这一目标?使用SQL Server 2005。
干杯,
麦克风
考虑以下函数来实现计算阶乘:[1]
(define fac-tail
(lambda (n)
(define fac-tail-helper
(lambda (n ac)
(if (= 0 n)
ac
(fac-tail-helper (- n 1) (* n ac)))))
(fac-tail-helper n 1)))
Run Code Online (Sandbox Code Playgroud)
我试图用let内部定义重写:
(define fac-tail-2
(lambda (n)
(let ((fac-tail-helper-2
(lambda (n ac)
(if (= 0 n)
ac
(fac-tail-helper-2 (- n 1) (* n ac))))))
(fac-tail-helper-2 n 1))))
Run Code Online (Sandbox Code Playgroud)
define时间没有错误,但执行结果为:
#;> (fac-tail-2 4)
Error: undefined variable 'fac-tail-helper-2'.
{warning: printing of stack trace not supported}
Run Code Online (Sandbox Code Playgroud)
如何使let版本有效?
方案版本是SISC v 1.16.6
[1]基于factorialSICP第1.2.1节的迭代版本http://mitpress.mit.edu/sicp/full-text/book/book-ZH-11.html#%_sec_1.2.1