首页
学习
活动
专区
圈层
工具
发布

UDF消失
EN

Stack Overflow用户
提问于 2011-06-14 17:30:59
回答 2查看 98关注 0票数 0

我正在将一堆数据从旧数据库迁移到一个新的数据库中。在迁移过程中,为我的脚本创建了一个UDF,这将给我一堆我需要的数据。当我多次运行调用UDF的循环时,我发现第一次迭代运行良好,但是UDF从下面的迭代中消失了。

我的代码是:

代码语言:javascript
复制
<cffunction name="getCats" access="public">
    <cfargument name="assignments" type="any" />

    <cfquery name="getCats" datasource="pgdold">
        SELECT c1.id AS id1, c1.category AS name1, c2.id AS id2, c2.category AS name2, c3.id AS id3, c3.category AS name3, c4.id AS id4, c4.category AS name4, c5.id AS id5, c5.category AS name5
        FROM category c1
        LEFT JOIN category AS c2 ON c2.parentid = c1.id
        LEFT JOIN category AS c3 ON c3.parentid = c2.id
        LEFT JOIN category AS c4 ON c4.parentid = c3.id
        LEFT JOIN category AS c5 ON c5.parentid = c4.id
    </cfquery>

    <cfquery name="get" dbtype="query">
        SELECT (name1 + '/' + name2 + '/' + name3 + '/' + name4 + '/' + name5) AS category
        FROM getCats
        WHERE
            <cfloop query="Arguments.assignments">
                (id1 = #Arguments.assignments.categoryid# OR id2 = #Arguments.assignments.categoryid# OR id3 = #Arguments.assignments.categoryid# OR id4 = #Arguments.assignments.categoryid# OR id5 = #Arguments.assignments.categoryid#)
                <cfif Arguments.assignments.currentrow IS NOT Arguments.assignments.recordCount> OR </cfif>
            </cfloop>
    </cfquery>
    <cfreturn get />
</cffunction>

<cfscript>
    olddb = {datasource='pgdold'};

    a = new Query(argumentCollection=olddb);
    a.setSQL('SELECT * FROM products LIMIT 10');
    p = a.execute();
    pr = p.getResult();
</cfscript>

<cfscript>
    products = arrayNew();
    for(i=1;i<=pr.recordCount;i++){
        product = {};
        if(!reFind('([0-9]+\-)(G|g)(I|i)(F|f)(T|t)',pr['sku'][i])){
            b = new Query(argumentCollection=olddb);
            b.setSql('SELECT * FROM productpics WHERE sku = :sku ORDER BY picorder');
            b.addParam(name='sku',value=pr['sku'][i]);
            pics = b.execute().getResult();
            picList = '';
            for(j=1;j<=pics.recordCount;j++){
                picList = picList & ';' & pics['imagename'][j];
            }

            d = new Query(argumentCollection=olddb);
            d.setSql('SELECT * FROM skucategories WHERE sku = :sku');
            d.addParam(name='sku', value=pr['sku'][i]);
            assignments = d.execute().getResult();

            categories = getCats(assignments);
            writeDump(categories);
            product = {
                store = 'admin',
                websites = 'base',
                attribute_set = 'Default',
                categories = '',
                type = 'simple',
                sku = pr['sku'][i],
                name = reReplace(reReplace(pr['title'][i],'\"','&##34;','all'),'\,','&##44;','all'),
                price = pr['price'][i],
                description = reReplace(reReplace(pr['detail'][i],'\"','&##34;','all'),'\,','&##44;','all'),
                short_description = '',
                image = pics['imagename'][1],
                small_image = pics['imagename'][1],
                thumbnail = pics['imagename'][1],
                weight = pr['weight'][i],
                has_options = 1,
                is_in_stock = 1,
                qty = 1000,
                disabled = 'No',
                status = 'Enabled',
                options_container = 'Black after info Column',
                tax_class_id = 'Taxable Goods',
                visibility = 'Catalog,Search',
                gallery =  right(picList,len(picList)-1) // Seperate images by semicolon (;)
            };
            arrayAppend(products,product);
        }
    }
</cfscript>

消失的是getCats函数。

*是的,代码很难看,效率很低。除了这一项工作之外,它并没有做什么更多的事情,在它完成工作之后,它将被丢弃,所以不要告诉我丑陋或低效。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-06-14 18:02:42

没有阅读您发布的代码的每一行,我有一种强烈的感觉,它与Var独家新闻有关。因为您在循环中调用该UDF。

请查询变量的作用域。

Pre CF9:

代码语言:javascript
复制
<!--- insert after <cfargument> --->
<cfset var getCats = "">
<cfset var get = "">

在具有CF9作用域的Local站点或Post上:

代码语言:javascript
复制
<cfquery name="local.getCats" datasource="pgdold">
<cfquery name="local.get" dbtype="query">
票数 2
EN

Stack Overflow用户

发布于 2011-06-14 18:05:06

您在UDF中使用与UDF相同的名称命名了一个变量。变量范围或将该查询重命名为其他查询。我建议给它取别的名字。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6347590

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档